Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lire un fichier ligne apres ligne sous condition

4 réponses
Avatar
lepetitjoe
Salut

J=B4ai eu a poster un Theme ici malheureusement j=B4ai pas pu avancer. Je
suis entrain de vouloir utiliser une nouvelle
methode afin de resoudre le probleme.

soit un fichier exemple suivant:


Code :

babababababa {
titititititi{
point_depart {
premiere_ligne{
deuxiemeligne{
troisieme ligne;
quatrieme ligne;
}
}
}
}
.=2E............
.=2E............
.=2E............

epepepeppep {
.=2E............etc..

je voudrai une fois la ligne " point_depart {" trouv=E9, recuperer cette
ligne hors mis la parenthese dans un tableau,ensuite
passer a la ligne suivante et faire de meme, ainsi de suite et des que
la premiere parenthse fermente est trouv=E9e,
arreter le transfert dans mon tableau mais chercher =E0 la suite du
fichier la prochaine ligne qui se termine par une
parenthese ouvrante
voila ce que j=B4essaie de faire :


Code :
while(<file>){

if(/^(.*?)\s* {$/){

push(tabel,$_);

}

}

mais je voudrai savoir comment faire pour qu=B4il ne me balance pas le
contenu entier des lignes avec parenthese ouvrante
de ce fichier dans mon tableau mais rien que les lignes =E0 partir de
"point_depart", ensuite qu=B4il s=B4arrete a la premiere
parenthese fermante et continue la copie =E0 la prochaine ligne
commencant par exemple par "deuxieme point" et s=B4arrete
a la meme condition de parenthese fermante...

Merci de m=B4aider

4 réponses

Avatar
Klaus
wrote:

mais je voudrai savoir comment faire pour qu´il ne me balance pas le
contenu entier des lignes avec parenthese ouvrante
de ce fichier dans mon tableau mais rien que les lignes à partir de
"point_depart", ensuite qu´il s´arrete a la premiere
parenthese fermante


voici un programme perl

=============
use strict;
use warnings;

my @table;

while <DATA> {
if (/point_depart/../}/) { push @table }
}

{ local $, = "n"; print @table; }

__DATA__
babababababa {
titititititi{
point_depart {
premiere_ligne{
deuxiemeligne{
troisieme ligne;
quatrieme ligne;
}
}
}
}
=============

ce programme fait exactement ce qui est specifié:

il sort comme résultat les lignes à partir de "point_depart", ensuite
il s'arrete a la premiere parenthese fermante

voici le résultat
++++++++++++++++++++++
point_depart {
premiere_ligne{
deuxiemeligne{
troisieme ligne;
quatrieme ligne;
}
++++++++++++++++++++++

mais je ne pense pas que c'est logique de chercher la premiere
parenthese fermante.

Il serait plutôt logique de chercher la paranthese fermante qui
correspond au "point_depart".

En fait ce type de problème correspond plutôt à perlfaq4:
"Comment repérer des éléments appariés ou imbriqués"

voir http://perl.enstimac.fr/DocFr/perlfaq4.html

Avatar
Klaus
Klaus wrote:
voici un programme perl

=============
use strict;
use warnings;

my @table;

while <DATA> {
if (/point_depart/../}/) { push @table }
}

{ local $, = "n"; print @table; }



Je suis désolé, par accident j'ai copié/collé une version
incorrecte. (erreur de syntaxe près du "push" et >>local $, = "n";<<
ne sert à rien).

Voici la version correcte:
=============
use strict;
use warnings;

my @table;

while (<DATA>) {
if (/point_depart/../}/) { push @table, $_ }
}

print @table;
=============

Avatar
lepetitjoe
Effectivement vous avez raison, j´ai bien pensé aller jusqu´a la
parenthese fermante du point d´ancrage mais je cherche encore comment
faire....car en fait je dois recuperer tout ce qui se trouve a
l´interieur de ce point d´ancrage.
merci
Avatar
Klaus
wrote:
Effectivement vous avez raison, j´ai bien pensé aller jusqu´a la
parenthese fermante du point d´ancrage mais je cherche encore comment
faire....car en fait je dois recuperer tout ce qui se trouve a
l´interieur de ce point d´ancrage.


En fait ce type de problème correspond plutôt à perlfaq4:
"Comment repérer des éléments appariés ou imbriqués"

voir http://perl.enstimac.fr/DocFr/perlfaq4.html

voici un extrait:
==================
[...]
Pour les expressions imbriquées utilisant (, {, [ ou < comme
délimiteurs, utilisez le module CPAN Regexp::Common ou voyez dans la
page de manuel perlre. Pour les autres cas, il vous faudra écrire un
analyseur.

Si vous songez sérieusement à écrire un analyseur syntaxique, de
nombreux modules ou gadgets pourront vous rendre la vie plus facile. Il
y a les modules du CPAN Parse::RecDescent, Parse::Yapp et
Text::Balanced ainsi que le programme byacc. Depuis perl 5.8,
Text::Balanced fait partie de la distribution standard.
[...]
==================