comprimer les lignes

Le
fred
J'essaye d'adapter ce petit script afin qu'il considère la ligne vide
comme la fin du premier bloc.

Je vous prie de m'aider.

use strict;
use warnings;
my @ar = [];
my $i = 0;
while (<DATA>) {
chomp; next if !length();
if (/^s*&s*$/) {
$i = 0; next;
}
push @{$ar[$i]}, @{$ar[$i++]} ? '&'.$_ : $_;
}
for my $ar (@ar) {
print @{$ar},"";

input
nom1
&
prénom1
&
adresse1

nom2
&
prénom2
&
adresse2

output
nom1&prénom2&adresse1
nom2&prénom3&adresse4
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #20124341
À (at) Fri, 11 Sep 2009 14:22:48 -0700 (PDT),
fred
J'essaye d'adapter ce petit script afin qu'il considère la ligne vide
comme la fin du premier bloc.

Je vous prie de m'aider.

use strict;
use warnings;
my @ar = [];
my $i = 0;
while (<DATA>) {
chomp; next if !length();
if (/^s*&s*$/) {
$i = 0; next;
}
push @{$ar[$i]}, @{$ar[$i++]} ? '&'.$_ : $_;
}
for my $ar (@ar) {
print @{$ar},"n";

input
nom1
&
prénom1
&
adresse1

nom2
&
prénom2
&
adresse2

output
nom1&prénom2&adresse1
nom2&prénom3&adresse4



La logiqe de votre script est bien compliquée pour un résultat qui ne
marche pas complètement. Essayez de ne faire qu'une seule chose à la
fois :

use strict;
use warnings;
my @ar;
my @lignes;
while (<DATA>) {
chomp;
# suppression des espaces autour d'un &
s/^s*&s*$/&/;
if ($_ eq "") {
# une ligne vide déclenche le stockage
# des lignes accumulées dans @ar
push @ar, [@lignes];
@lignes = ();
} else {
# une ligne non vide est accumulée dans
# le tableau des lignes
push @lignes, $_;
}
}
# on stocke les lignes accumulées dans @ar
# si le fichier d'entrée ne se termine pas
# par une ligne vide
push(@ar, [@lignes]) if @lignes;

# on affiche le tableau de tableaux de lignes
for my $li (@ar) {
print @$li, "n";
}


--
Paul Gaborit - Perl en français -
Publicité
Poster une réponse
Anonyme