[perl] Selectionner un bloc de texte

Résolu
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   -  
 :):):) -
Bonjour,
j'ai un fichier texte de cette forme :

!!!TOM
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id mauris eros. Aliquam vel ligula nulla. 

Proin varius, erat ut blandit pulvinar, 
massa nulla molestie diam, non accumsan libero orci eu velit. 

!!!BOB
Aenean elementum erat vel nulla congue tempor. Donec sit amet mi mauris. Curabitur nec fermentum dui. Mauris ut velit libero, non consequat ipsum. Fusce id neque a quam sagittis convallis 
ac eget lacus. Proin ultrices                                   aliquet congue. Etiam accumsan aliquet lectus. Nunc tempor lobortis



Donc, de ce fichier texte je connais "!!!", "BOB" et "TOM".

Le but serait de sélectionner tout le bloc de texte après "!!!TOM" et s'arrêter avant "!!!BOB".

Si vous savez comment faire je suis preneur ;)

A+

A voir également:

5 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$ perl -e '$i=0;while(<>){if(/TOM/){$i=1;next};$i=0 if /BOB/; print if $i}' fichier   
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id mauris eros. Aliquam vel ligula nulla.    

Proin varius, erat ut blandit pulvinar,    
massa nulla molestie diam, non accumsan libero orci eu velit.    

$
2
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
comme ça ?
open (FILE, "mod.txt");
@lignes = <FILE>;
close(FILE);
$i = 0;
$f = 0;

while ( @lignes ){
        if ($lignes[$i] =~ /!!!TOM/)
                {$i++; $f=1; next}
        if ($lignes[$i] =~ /!!!/)
                {last}
        if($f)
                {print $lignes[$i]};
        $i ++;
}
1
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
yep merci ^^
0
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
Yes, merci bien.

As tu une solution avec la contrainte où je ne connais que TOM ou BOB ?

Car je ne peux pas connaitres les 2 en mêmes temps dans mon code, disons que je peux connaitre celui que je cherche mais pas le suivant.

Imaginons que je cherche le bloc de TOM, je connais TOM et "!!!" mais je ne sais pas ce qu'il va y avoir avant ou après.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si tu ne connais que TOM, quelle est la condition de fin du bloc ?
ou si tu ne connais que BOB, quelle est la condition de début du bloc ?
à la place de if(/TOM/), on peut tester une variable
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
La condition de début de bloc est les 3 !. J'ai fait ca mais je trouve pas ca super optimisé ... :
open (FILE, "mod.txt");
@lignes = <FILE>;
close(FILE);
$i = 0;
$v = 1;

while ( @lignes ){
	if ($lignes[$i] =~ /!!!TOM/){
		
		while ($lignes[$v] =~ /^[^!!!]/){
			print "$lignes[$v]\n";
			$v ++;
		}
		if ($lignes[$v] =~ /!!!/){
			goto B;
		}
	}
	$i ++;
	$v = $i+1;
}
B:
0
:):):)
 
Bonjour,

Plus simple
open(FILE, "mod.txt");
my @array;

while(FILE)
{

push @array, $_ if /!!!BOB/.../!!!TOM/;

}
pop @array;
shift @array;

print @array;

ou quelquechose comme ça.

Merci,
0