Bah j'ai résolu le problème, peut re le code n'est pas optimisé mais il me semble qu'il donne des résultats corrects, voici le code
Code :
#!/usr/bin/env perl use strict; use warnings; use autodie; use utf8; open(my $fh, "<:utf8", '/home/lenovo/Bureau/txt_to_xml/exple') or die "Failed to open file: $!\n"; open my $fh1, ">:utf8", '/home/lenovo/Bureau/txt_to_xml/res.txt'; my @save = <$fh>; foreach (@save) { if ($_ =~ /^وقال/) { $_ = ""; } if ($_ =~ /^وتقول/) { $_ = ""; } if ($_ =~ /^قال/) { $_ = ""; } if ($_ =~ /^تقول/) { $_ = ""; } if ($_ =~ /^باب/) { $_ = ""; } if ($_ =~ /^وقالا/) { $_ = ""; } if ($_ =~ /^يقول/) { $_ = ""; } if ($_ =~ /^وأنشد/) { $_ = ""; } if ($_ =~ /^أنشد/) { $_ = ""; } if ($_ =~ /^يقال/) { $_ = ""; } if ($_ =~ /^أي/) { $_ = ""; } if ($_ =~ /^ويقال/) { $_ = ""; } if ($_ =~ /^سقول/) { $_ = ""; } { $_ = ""; } } foreach (@save) { print $fh1 $_. "\n" if ($_); }
|
******************************
pour supprimer les lignes qui ne contiennent pas deux points cette condition est juste ?
dans le me contexte pour un fichier de type:
الأَوْقُ: الثقل؛ يقال: ألقى عليَّ أَوْقَه. وتقول: أما والله لتجدنه عليك ذا أوق
المأفول، من الرجال: الذي لا يجدونه على ما ظنوا به، في القتال وغيره.
الأَفِيقُ: الجلد الذي قد دبغ ولم يُقطع.
je veux extraire le premier mot suivi de deux points (en effet je veux traiter seulement les lignes commençant par un seul mot (non pas deux ou plus) suivi de deux points) et la chaine de caractère se trouvant après le deuc points, j'ai essayé ce code mais il traite meme le cas ou ils existent deux mots au début de la ligne
Code :
use strict; use warnings; use autodie; open(my $fh, "<:utf8", '/home/lenovo/Bureau/txt_to_xml/res.txt') or die "Failed to open file: $!\n"; open my $fh1, ">:utf8", '/home/lenovo/Bureau/txt_to_xml/jim.xml'; while (<$fh> ) { if (/^ (.* )(: )([^\ s])(.* )/ ) { print $fh1 "<entry form=\"$1\">\n"; print $fh1 "\t\t<gloss>$3</gloss>\n"; print $fh1 "\t</defs>\n"; print $fh1 "</entry>\n\n\n"; } } Merci beaucoup d'avance.
|
Message édité par gilou le 24-01-2017 à 23:06:46