supprimer les lignes commençant par un mot - Perl - Programmation
Marsh Posté le 24-01-2017 à 15:52:05
Code : |
Je n'ai pas testé, car je suis au boulot, mais un truc comme ceci devrait le faire.
A+,
Marsh Posté le 24-01-2017 à 16:56:17
Merci beaucoup pour votre réponse gilou, mais ce programme ne donne pas le bon résultat, en fait j'ai changé un peu le teste comme ça :
Code :
|
j'ai deux autres questions si bien sûre vous me permettez :
si maintenant j'ai des autres mots à part ":وقال" pour faire le teste , comment je peux modifier l'expression régulière ?
La deuxième question comment je peux supprimer de mon fichier toute ligne ne contenant pas ":" ?
Merci d'avance
Marsh Posté le 24-01-2017 à 18:48:56
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 :
|
******************************
pour supprimer les lignes qui ne contiennent pas deux points cette condition est juste ?
Code : |
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 : |
Marsh Posté le 24-01-2017 à 23:06:14
Ah! Au boulot j'avais lu trop vite, je croyais que vous vouliez juste supprimer le mot, pas toute la ligne.
Ce que vous voulez, c'est:
Code : |
et pour plusieurs mots possibles en début de ligne a sauter:
next if (/^(وقال|وقال|وتقول|ويقال)/);
J'en ai mis que 4.
Pour supprimer les lignes sans : je ferais
next unless (/:/);
Pour le reste
if (/^\s*(.*?)\s*:\s*(.*?)\s*$/) {
devrait mettre ce qu'il faut dans $1 et $2.
(.*): c'est le comportement par défaut: il va essayer de mettre dans le groupe un maximum de caractères suivis de : donc il va absorber un premier : s'il y en a deux et qu'il s'il matche la suite avec le reste de l'expression régulière
(.*?): c'est le comportement par inverse: il va essayer de mettre dans le groupe un minimum de caractères suivis de : donc il va s’arrêter au premier : s'il matche la suite avec le reste de l'expression régulière
A+,
Marsh Posté le 25-01-2017 à 09:42:59
Bonjour gilou et merci beaucoup pour vos réponses,
mais l'expression ne donne pas vraiment ce que je souhaite en effet: si je fait :
Code :
|
si j'ai le texte suivant:
الأَوْقُ: الثقل؛
المأفول، من الرجال: الذي لا يجدونه على ما ظنوا به، في القتال وغيره
الأَفِيقُ: الجلد الذي قد دبغ ولم يُقطع
ونشطت العقدة، إذا جعلتها بأُنشوطة؛ وأنشطها: حلَّها
le résultat est;
<entry form="الأَوْقُ">
<defs>
<gloss>الثقل؛</gloss>
</defs>
</entry>
<entry form="المأفول، من الرجال">
<defs>
<gloss>الذي لا يجدونه على ما ظنوا به، في القتال وغيره.</gloss>
</defs>
</entry>
<entry form="الأَفِيقُ">
<defs>
<gloss>الجلد الذي قد دبغ ولم يُقطع.</gloss>
</defs>
</entry>
<entry form="ونشطت العقدة، إذا جعلتها بأُنشوطة؛ وأنشطها">
<defs>
<gloss>حلَّها.</gloss>
</defs>
</entry>
alors je veux seulement afficher :
<entry form="الأَوْقُ">
<defs>
<gloss>الثقل؛</gloss>
</defs>
</entry>
<entry form="الأَفِيقُ">
<defs>
<gloss>الجلد الذي قد دبغ ولم يُقطع.</gloss>
</defs>
</entry>
Marsh Posté le 25-01-2017 à 21:08:32
Ah! Une fois de plus, j'avais lu trop vite votre post.
Donc vous voulez sauter les lignes ou on a deux mots avant le : et donc un blanc entre les deux mots.
Remplacer le
if (/^\s*(.*?)\s*:\s*(.*?)\s*$/)
par
if (/^\s*(\S*?)\s*:\s*(.*?)\s*$/)
\S représente l’opposé de \s et donc \S* va matcher toute suite de caractère qui ne contient pas de \s
A+,
Marsh Posté le 26-01-2017 à 23:11:06
Bonsoir gilou,
Je trouve souvent des difficultés avec les expressions régulières ..
donc je veux afficher seulement les lignes qui se termine par un point par exemple : .والعمهوج: الطويلة الجميلة
j'aiessayé ce code :
Code : |
mais il m'affiche aussi des lignes de cette forme : .والعضدة: التي تجيء من جانب الحوض وهي العضادة من الحوض. وقال العوام العبسي: عضد، يعني جانب الحوض
Marsh Posté le 27-01-2017 à 14:32:57
Elle se termine bien avec un point cette ligne.
A+,
Marsh Posté le 24-01-2017 à 14:50:16
Bonjour,
dans un fichier, je veux supprimer toutes les lignes commençant par le mot :وقال (fichier en arabe),
voici mon code
Mais pas de résultat correct, y'a t'il quelqu'un qui peut m'aider SVP ?