Perl - Fichier Texte Sed - Perl - Programmation
Marsh Posté le 24-03-2010 à 02:18:34
Fais voir ton code, qu'on comprenne ce qui y provoque la suppression des lignes.
A+,
Marsh Posté le 24-03-2010 à 08:56:56
gilou a écrit : |
Bonjour,
Voila mon code:
Code :
|
Merci
Marsh Posté le 24-03-2010 à 14:13:27
Le comportement que tu as est normal:
/(AAA_\w{4}\:=)/ ... /AAA_\w{4}|\[/ marche comme un switch on/off
Quand tu trouves /(AAA_\w{4}\:=)/ ça met a ON (ligne trouvée incluse), et quand tu trouves ensuite /AAA_\w{4}|\[/ ca met a OFF (après la ligne trouvée), donc:
[BAL_A] => Condition à 0 on n'imprime pas
AAA_BBBB:= Modele => /(AAA_\w{4}\:=)/ met a 1 la condition, et on imprime
AAA_CCCC:= Fichier1,Fichier2, => Condition a 1: on imprime et /AAA_\w{4}|\[/ remet ensuite a 0 la condition
Fichier3,Fichier4, => Condition à 0 on n'imprime pas
Fichier5,Fichier2 => Condition à 0 on n'imprime pas
AAA_DDDD:= Chaine1,Chaine2, => /(AAA_\w{4}\:=)/ met a 1 la condition, et on imprime
Chaine3,Chaine4, => Condition a 1: on imprime
Chaine4,Chaine5 => Condition a 1: on imprime
AAA_EEEE:= Input1,Input2, => Condition a 1: on imprime et /AAA_\w{4}|\[/ remet ensuite a 0 la condition
Input3,Input4, => Condition à 0 on n'imprime pas
Input5,Input6 => Condition à 0 on n'imprime pas
[END_BAL_A] => Condition à 0 on n'imprime pas
A+,
Marsh Posté le 24-03-2010 à 14:52:30
Ok, je comprends bien le problème.
Je ne vois pas comment faire pour arriver au résultat souhaité ?
Il faut utiliser une instruction du genre =~s ou une expression réguliére ?
Marsh Posté le 24-03-2010 à 15:19:03
Tu peux par exemple faire comme suit:
Code :
|
L'idée, c'est de positionner un flag qui vaut 1 pour chaque bloc a traiter et 0 ailleurs (ici, les blocs sont contigus donc on ne remet pas a 0 entre deux blocs, sinon, on pourrait le détecter dans ton cas par l'absence de virgule en fin de ligne).
Ensuite j'ai utilisé le fait que les lignes terminées par une virgule perdent leur \n final, mais c'est à adapter selon tes données.
A+,
Marsh Posté le 23-03-2010 à 23:52:46
Bonjour,
Je voudrais savoir si il est possible avec Perl de faire ce que l'on peut faire avec un sed ou un awk sur plusieurs lignes. (capturer entre un motif de début ou un motif de fin)
J'ai un fichier texte comme suit:
Je voudrais arriver à le remettre en forme comme suit:
J'ai donc essayer de capturer le texte avec une expression régulière.
Je prends le texte compris entre AAA_\w{4} et le prochain AAA_ ou [, mais j'ai quelques petits problèmes.
Les lignes 4, 5, 7, 8, 10 et 11 sont supprimées ...
Avec le perl, peux-t-on faire une lecture sur plusieurs lignes ?