Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1508 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  supprimer plusieurs retours à la ligne

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

supprimer plusieurs retours à la ligne

n°2295309
mouda
Posté le 28-01-2017 à 21:15:09  profilanswer
 

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
mood
Publicité
Posté le 28-01-2017 à 21:15:09  profilanswer
 

n°2295312
gilou
Modérateur
Modzilla
Posté le 29-01-2017 à 10:49:43  profilanswer
 

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é!  --
n°2295315
mouda
Posté le 29-01-2017 à 13:31:40  profilanswer
 

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
n°2295320
gilou
Modérateur
Modzilla
Posté le 29-01-2017 à 18:28:07  profilanswer
 

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é!  --
n°2295338
mouda
Posté le 29-01-2017 à 22:00:17  profilanswer
 

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

n°2295460
gilou
Modérateur
Modzilla
Posté le 31-01-2017 à 12:41:06  profilanswer
 

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é!  --
n°2295463
h3bus
Troll Inside
Posté le 31-01-2017 à 13:17:45  profilanswer
 

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++

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  supprimer plusieurs retours à la ligne

 

Sujets relatifs
Plusieurs variables ou un tableau? (Performances)Creer un bouton macro plusieurs feuilles d'un classeur
offset de plusieurs elementsfusions de plusieurs lignes dans différentes colonnes
Afficher plusieurs lignes sur une seuleSelect avec variable contenant plusieurs valeurs
Affichier plusieurs URL à la suite dans une même page[VB/VBA/VBS] Macro excel d’impression sur plusieurs feuilles.
Attente passive de plusieurs sémaphores[MYSQL] Concaténation de plusieurs lignes
Plus de sujets relatifs à : supprimer plusieurs retours à la ligne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR