transformer un fichier texte en XML - Perl - Programmation
Marsh Posté le 17-01-2017 à 23:27:26
Code : |
Chez moi ça marche.
Je vous laisse finir, j'ai pas traite le cas du tag exemple.
A+,
Marsh Posté le 17-01-2017 à 23:26:41
Bonsoir à tous ,
c'est encore moi cherchant une solution ... j' ai essayé de développer un programme perl pour transformer un fichier texte en xml ,
Code :
|
par exemple pour le texte:
(حاودته) الْحمى محاودة عاودته حينا بعد آخر وَيُقَال هُوَ يحاودنا بالزيارة يزورنا زيارات متقطعة وَفِي الْأَمر تأنى وَنظر فِيهِ مرّة بعد أُخْرَى
(حاذ)
عَلَيْهِ حوذا حَافظ وَالشَّيْء حاطه وَغلب عَلَيْهِ وَالدَّوَاب سَاقهَا سوقا عنيفا
(أحوذ) أسْرع وَيُقَال أحوذ السّير وَالدَّوَاب حاذها وَالشَّيْء جمعه وضمه وَالْقَصِيدَة أحكمها
(استحوذ) على الشَّيْء استولى وعَلى فلَان غَلبه وَيُقَال استحوذ عَلَيْهِ الشَّيْطَان وَفِي التَّنْزِيل الْعَزِيز {استحوذ عَلَيْهِم الشَّيْطَان فأنساهم ذكر الله}
(الأحوذي) المشمر فِي الْأُمُور القاهر لَهَا لَا يند عَلَيْهِ مِنْهَا شَيْء والسريع فِي كل مَا أَخذ فِيهِ والعالم بِالْأَمر
(الحاذ) الظّهْر وَيُقَال فلَان خَفِيف الحاذ قَلِيل المَال والعيال وَشَجر من الحمض يعظم منابته السهل والرمل وَهُوَ ناجع فِي الْإِبِل تخصب عَلَيْهِ رطبا ويابسا وَالْحَال (ج) أحواذ
(الحواذ) الْبعد
je dois avoir le fichier xml suivant:
<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>
<exemple>استحوذ عَلَيْهِم الشَّيْطَان فأنساهم ذكر الله</exemple> //la phrase entre {} présente exemple
</defs>
</entry>
<entry form="الأحوذي">
<defs>
<gloss>المشمر فِي الْأُمُور القاهر لَهَا لَا يند عَلَيْهِ مِنْهَا شَيْء والسريع فِي كل مَا أَخذ فِيهِ والعالم بِالْأَمر</gloss>
</defs>
</entry>
en fait j'arrive pas à faire les expresions régulières permettant d'extraire les mots entre () , les phrases entre {} , etc
en attendant votre aide merci d'avance
Marsh Posté le 17-01-2017 à 23:30:47
Les sujets suivant ont été fusionnés à ce sujet par Gilou
Marsh Posté le 17-01-2017 à 23:38:57
merci beaucoup gilou, est ce que vous pouvez m'expliquer un peu le code ?
dans ce cas (il y a un retour à la ligne)
(حاذ)
عَلَيْهِ حوذا حَافظ وَالشَّيْء حاطه وَغلب عَلَيْهِ وَالدَّوَاب سَاقهَا سوقا عنيفا
il affiche <gloss></gloss> au lieu <gloss>عَلَيْهِ حوذا حَافظ وَالشَّيْء حاطه وَغلب عَلَيْهِ وَالدَّوَاب سَاقهَا سوقا عنيفا</gloss> , comment peut on corriger ça ?
Merci encore une fois
Marsh Posté le 18-01-2017 à 01:46:26
Si vous avez pas tout en une ligne, c'est un peu plus complexe, parce que au lieu de parser une ligne il faut considerer tous les types de ligne possible.
Code :
|
A vous d’améliorer (ajouter un blanc entre deux chaines concaténées si nécessaire, etc)
A+,
Marsh Posté le 18-01-2017 à 13:49:31
c'est un peu tard, mais vraiment c'est comme de la magie Bravo gilou et merci beaucoup
Marsh Posté le 18-01-2017 à 14:12:37
est ce que vous pouvez m'expliquer un peu ce ces lignes de code ?
Code :
|
A vous d’améliorer (ajouter un blanc entre deux chaines concaténées si nécessaire, etc)
A+,[/quotemsg]
Marsh Posté le 18-01-2017 à 21:56:19
if (/^\(([^)]+)\)([^{]*)(\{(.*)\})?$/)
Si la ligne complète ^...$ peut se décomposer en
\(([^)]+)\) : une expression parenthésée \(...\) contenant un groupe (...) contenant des + caractères différents de ): [^)]
([^{]*) : un second groupe contenant 0 ou des * caractères différents de {: [^{]
(\{(.*)\})? : un groupe optionnel (...)? contenant
\{(.*)\} : une expression accoladée \{...\} contenant un groupe (...) contenant 0 ou des * caractères .
Bref la première expression c'est pour capturer une expression entre parenthèse et s’arrêter a la première parenthèse fermante car par défaut sur (xxx)yyy(zzz) perl capturerait tout si on cherchait avec \((.*)\)
La seconde pour capturer ce qui suit en s’arrêtant au premier {
El la dernière c'est pour capturer une expression entre accolades et s’arrêter a la première accolade fermante
Des expressions régulières plus réalistes tenant compte de possible blancs entre les champs, etc, auraient plutôt cet aspect:
Code :
|
A+,
Marsh Posté le 18-01-2017 à 22:09:40
comment je peux modifier le code pour avoir
<entry form="الْبَين">
<defs>
<gloss> الْوَاضِح والطلق اللِّسَان الفصيح </gloss>
</defs>
</entry>
au lieu de
<entry form="الْبَين">
<defs>
<gloss> الْوَاضِح والطلق اللِّسَان الفصيح (ج) أبيناء وبيناء وأبيان </gloss>
</defs>
</entry>
c'est à dire je m'arrete toujours au premier parenthèse rencontré
Marsh Posté le 18-01-2017 à 22:36:19
Remplacer
if (/^\s*\((.*?)\)\s*(.*?)\s*(?:\{(.*?)\})?\s*$/) {
par
if (/^\s*\((.*?)\)\s*(.*?)\s*(?:\(.*)?(?:\{(.*?)\})?\s*$/) {
et
if (/^\s*(.*?)\s*(?:\{(.*?)\})?\s*$/) {
par
if (/^\s*(.*?)\s*(?:\(.*)?(?:\{(.*?)\})?\s*$/) {
Bref rajouter un (?:\(.*)? qui va passer a la trappe un caractère ( et tous les caractères qui suivent, tant qu'un caractère { ou une fin de ligne n'est pas rencontrée (voir le (?:\{(.*?)\})?\s* qui suit)
A+,
Marsh Posté le 16-01-2017 à 22:21:19
Bonsoir à tous,
Je débute en perl et j'ai vraiment besoin de votre aide, en fait je dois développer un programme qui permet de transformer un fichier texte sous la forme suivante:
(حاودته) الْحمى محاودة عاودته حينا بعد آخر وَيُقَال هُوَ يحاودنا بالزيارة يزورنا زيارات متقطعة وَفِي الْأَمر تأنى وَنظر فِيهِ مرّة بعد أُخْرَى
(حاذ)
عَلَيْهِ حوذا حَافظ وَالشَّيْء حاطه وَغلب عَلَيْهِ وَالدَّوَاب سَاقهَا سوقا عنيفا
(أحوذ) أسْرع وَيُقَال أحوذ السّير وَالدَّوَاب حاذها وَالشَّيْء جمعه وضمه وَالْقَصِيدَة أحكمها
(استحوذ) على الشَّيْء استولى وعَلى فلَان غَلبه وَيُقَال استحوذ عَلَيْهِ الشَّيْطَان وَفِي التَّنْزِيل الْعَزِيز {استحوذ عَلَيْهِم الشَّيْطَان فأنساهم ذكر الله}
(الأحوذي) المشمر فِي الْأُمُور القاهر لَهَا لَا يند عَلَيْهِ مِنْهَا شَيْء والسريع فِي كل مَا أَخذ فِيهِ والعالم بِالْأَمر
(الحاذ) الظّهْر وَيُقَال فلَان خَفِيف الحاذ قَلِيل المَال والعيال وَشَجر من الحمض يعظم منابته السهل والرمل وَهُوَ ناجع فِي الْإِبِل تخصب عَلَيْهِ رطبا ويابسا وَالْحَال (ج) أحواذ
(الحواذ) الْبعد
en un fichier xml comme suit:
<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>
<exemple>استحوذ عَلَيْهِم الشَّيْطَان فأنساهم ذكر الله</exemple> //la phrase entre {} présente exemple
</defs>
</entry>
<entry form="الأحوذي">
<defs>
<gloss>المشمر فِي الْأُمُور القاهر لَهَا لَا يند عَلَيْهِ مِنْهَا شَيْء والسريع فِي كل مَا أَخذ فِيهِ والعالم بِالْأَمر</gloss>
</defs>
</entry>
en attendant votre aide merci beaucoup d'avance.