supprimer plusieurs retours à la ligne

supprimer plusieurs retours à la ligne - Perl - Programmation

Marsh Posté le 28-01-2017 à 21:15:09    

Bonsoir à tous,  
 
je veux fusionner des lignes d'un fichiers écrit sous cette forme:
 
الأَوْقُ: الثقل؛ يقال: ألقى عليَّ أَوْقَه. وتقول: أما والله لتجدنه عليك ذا أوق؛ قال:والجِنَّ أَمْسَى أَوقُهمْ مُجَمَّعَا
المأفول، من الرجال: الذي لا يجدونه على ما ظنوا به، في القتال وغيره
الأَوقُ: الجور، وأنشد  
تَعَلَّم يا أَبا الجَحّافِ أَنِّي ... أَخٌ لك ما تَبَيَّنْتَ الطَّرِيقَا
وما لم تَغْشَ أَوْقاً إنَّ عَجْزاً ... برَأْيِ الْمَرْءِ أَن يَغْشَى الأْوُوقا
والآدم من الظباء: ذو الجُدَّتين السوداوين، ولونه إلى الحمرة
أَنْفُ كل شيءٍ: جانبه؛ تقول: ما أطعمتني إلا أنف الرّغَّيف: كسرة
رَعتْ بارِضَ البُهْمَى جَمِيماً وبُسْرةً ... وَصَمْعاءَ حتى آنَفَتْهَا نِصَالُهَا
والإِرَةُ: معتفرهم، وهو المُعْتَلَجُ والمُعْتَكَل؛ وقال حازم بن عتَّاب الفريريُّ
 
en fait je veux des lignes sous cette forme: (mot ou plusieurs mots): phrase  
donc comme résultat:  
 
 
الأَوْقُ: الثقل؛ يقال: ألقى عليَّ أَوْقَه. وتقول: أما والله لتجدنه عليك ذا أوق؛ قال:والجِنَّ أَمْسَى أَوقُهمْ مُجَمَّعَا
المأفول، من الرجال: الذي لا يجدونه على ما ظنوا به، في القتال وغيره
الأَوقُ: الجور، وأنشد تَعَلَّم يا أَبا الجَحّافِ أَنِّي ... أَخٌ لك ما تَبَيَّنْتَ الطَّرِيقَا وما لم تَغْشَ أَوْقاً إنَّ عَجْزاً ... برَأْيِ الْمَرْءِ أَن يَغْشَى الأْوُوقا
والآدم من الظباء: ذو الجُدَّتين السوداوين، ولونه إلى الحمرة
أَنْفُ كل شيءٍ: جانبه؛ تقول: ما أطعمتني إلا أنف الرّغَّيف: كسرة رَعتْ بارِضَ البُهْمَى جَمِيماً وبُسْرةً ... وَصَمْعاءَ حتى آنَفَتْهَا نِصَالُهَا
والإِرَةُ: معتفرهم، وهو المُعْتَلَجُ والمُعْتَكَل؛ وقال حازم بن عتَّاب الفريريُّ
 
j'ai essayéavec des regex mais je n'arrive pas à résoudre le pblme...


Message édité par mouda le 29-01-2017 à 10:34:00
Reply

Marsh Posté le 28-01-2017 à 21:15:09   

Reply

Marsh Posté le 29-01-2017 à 10:49:43    

C'est pas difficile, a vous de l’implémenter:
Vous créez une variable $a_ecrire
Vous lisez le fichier ligne a ligne
Pour chaque ligne lue (donc dans $_),
- si elle contient le pattern /.../ vous la concaténez a la ligne a_ecrire: $a_ecrire = $a_ecrire . $_  (avec peut être ajout d' un blanc $a_ecrire = $a_ecrire . " " . $_ a vous de voir)
- sinon  
  a- vous imprimez la ligne a écrire si elle n'est pas vide
  b- vous resettez la ligne a ecrire avec la ligne courante $a_ecrire = $_
Et en sortie de la boucle de lecture, ne pas oublier d'imprimer la ligne a écrire restante.
 
Bref, on accumule les lignes lues, et on ne les envoie en sortie que chaque fois que la nouvelle ligne lue (pas encore accumulée) ne contient pas ...
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-01-2017 à 13:31:40    

j'ai essayé ce code mais il y a toujours des erreurs :

Code :
  1. use strict;
  2. use warnings;
  3. use autodie;
  4. use utf8;
  5.  
  6. open(my $fh1, "<:utf8", '/home/lenovo/Bureau/txt_to_xml/retourChariot') or die "Failed to open file: $!\n";
  7.  
  8. open my $fh2, ">:utf8", '/home/lenovo/Bureau/JimDictionary/resRetourChariot';
  9.  
  10.  
  11. my $a_ecrire;
  12.  
  13. while (<$fh1> ) {
  14. if (/^\s*(.*)[^:](.*)\s*/) {
  15. $a_ecrire = $a_ecrire . " " . $_;
  16.  
  17. #print $fh2 $a_ecrire;
  18. }
  19. else
  20. {
  21.  
  22.  
  23. print $fh2 $a_ecrire if ($a_ecrire !~"" );
  24. $a_ecrire = $_;
  25.  
  26. }
  27.  
  28. }
  29. print $fh2 $a_ecrire;
  30. close $fh1;
  31. close $fh2;


 
je pense qu'il y a un pblme avec le regex


Message édité par mouda le 29-01-2017 à 15:50:05
Reply

Marsh Posté le 29-01-2017 à 18:28:07    

Clairement, puisque j'ai parlé de celle ci:
/\.\.\./
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-01-2017 à 22:00:17    

je veux concaténer  
تَعَلَّم يا أَبا الجَحّافِ أَنِّي ... أَخٌ لك ما تَبَيَّنْتَ الطَّرِيقَا  avec الأَوقُ: الجور، وأنشد   afin d'avoir une seule ligne comme:  
الأَوقُ: الجور، وأنشد تَعَلَّم يا أَبا الجَحّافِ أَنِّي ... أَخٌ لك ما تَبَيَّنْتَ الطَّرِيقَا وما لم تَغْشَ أَوْقاً إنَّ عَجْزاً ... برَأْيِ الْمَرْءِ أَن يَغْشَى الأْوُوقا  
 
c-à-d à la fin tous les lignes de fichier sont sous la forme mot ou plus: mot ou plus

Reply

Marsh Posté le 31-01-2017 à 12:41:06    

Ben quel est le critère clair permettant de savoir que la ligne qui vient d’être lue n'est pas a concaténer avec les pressentes?
Une fois le critère clairement défini, la regexp sera facile a écrire.
 
A+,


Message édité par gilou le 31-01-2017 à 12:42:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 31-01-2017 à 13:17:45    

Comme le dit gilou, la première tâche avant de créer un regexp (et n'importe quel programme d'ailleurs) c'est de formaliser le besoin.
 
Du fait de la barrière de la langue, je suis incapable d'extraire le besoin de tes exemples.


---------------
sheep++
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed