OVH Cloud OVH Cloud

Html & split

61 réponses
Avatar
ptilou
Bonsoir,

J'ai un fichier de 50 Mo, je souhaiterais le d=E9couper =E0 chaque fois
qu'il y a la balise <HTML> en un "fichier fille"
Voila se que j'ai fais et marche pas :
#!/usr/local/bin/perl -wn
BEGIN {
$file =3D "$0";
$/ =3D \<HTML>;
$n =3D 1;
}
unless( $n++ % \<HTML> ) { close F;
open F, "> $file.csv"
or die "Impossible de cr=E9er $file.csv: $!";
$file++;
}
print F;

L'erreur : $ perl -w cut-perl partie00
readline() on unopened filehandle HTML at cut-perl line 4.
Use of uninitialized value in <HANDLE> at cut-perl line 1.
readline() on unopened filehandle HTML at cut-perl line 7.
print() on unopened filehandle F at cut-perl line 12.
Use of uninitialized value in <HANDLE> at cut-perl line 12, <> chunk 1.

Mer=E7i

Ptilou

10 réponses

1 2 3 4 5
Avatar
Jérémy JUST
On 13 Jun 2005 09:42:39 -0700
wrote:

#!/usr/local/bin/perl -wn
BEGIN {
$file = "$0";
$/ = <HTML>;
[...]

L'erreur : $ perl -w cut-perl partie00
readline() on unopened filehandle HTML at cut-perl line 4.


Je crois que le message est clair, même si tu n'as que des notions
d'anglais: Perl constate que tu lis à partir d'un descripteur de fichier
sans l'avoir ouvert avant.

Tu ne voulais pas écrire plutôt

$/ = '<HTML>';


Bon, sinon, il y a plein de choses qui me semblent bizarres dans ton
script. Quelques notes en vrac:

* Tu sais que $0 contient le nom du programme en cours? J'ai
l'impression que tu penses y trouver le premier argument de ton
programme. D'ailleurs, plus loin, tu incrémentes cette valeur, ce qui
n'a de sens ni dans le premier cas, ni dans le cas réel.

* % est l'opérateur modulo. Il n'a de sens qu'avec des opérandes
numériques à ma connaissance; je ne vois pas ce que tu fais avec
« % <HTML> »

* Je ne vois pas l'intérêt de ton bloc BEGIN. Le contenu de ce bloc est
destiné à être exécuté pendant la compilation. Dans ton cas, il contient
des instructions qui peuvent tout aussi bien être exécutées pendant
l'exécution normale.

* « print F; » ne doit pas faire grand chose d'intéressant. Tu veux
peut-être écrire « print F $ma_chaine » (ou « print <F> », puisqu'on en
est à faire n'importe quoi).



Tu n'as pas envie de t'acheter un petit livre sur Perl?

--
Jérémy JUST

Avatar
damien guerin
C'est du perl ça???
Avatar
ptilou
Bonjour,

C'est du perl ça???


Oui !
La question que je me pose est quel opérateur à la place de %

Ptilou

Avatar
damien guerin
En tout cas c'est ilisible...
Tu devrais plutot faire une truc du style :
open (IN, "< file.html");
open (OUT, ">out.tmp");
cpt=0;
while ($line = <IN>) {
if ($line =~ /<HTML/) {
$cpt++;
close OUT;
rename "out.tmp", $cpt.".hml";
open (OUT, ">out.tmp");
}
print <OUT>, $line;
}
close OUT;

Bon un truc du style, quoi... En cas, c'est nettement plus visible !
Avatar
ptilou
Bonjour,

damien guerin wrote:
En tout cas c'est ilisible...
Tu devrais plutot faire une truc du style :
open (IN, "< file.html");
open (OUT, ">out.tmp");
cpt=0;
while ($line = <IN>) {
if ($line =~ /<HTML/) {
$cpt++;
close OUT;
rename "out.tmp", $cpt.".hml";
open (OUT, ">out.tmp");
}
print <OUT>, $line;
}
close OUT;

Bon un truc du style, quoi... En cas, c'est nettement plus visible !
9a donne :

$ ./cut-perl Grd.html
./cut-perl: line 1: syntax error near unexpected token `IN,'
./cut-perl: line 1: ` open (IN, "< file.html");'

Pourquoi ?

Ptilou

Avatar
damien guerin
J'ai pondu ça à la mano sans rien tester...
Bon voilà maintenant, c'est tester :

open (IN, "< file.html");
open (OUT, ">out.tmp");
$cpt=0;
while ($line = <IN>) {
if ($line =~ /<HTML/) {
$cpt++;
close OUT;
rename "out.tmp", $cpt.".hml";
open (OUT, ">out.tmp");
}
print <OUT>, $line;


}

close OUT;

C'est quoi ton interpréteur perl "cut-perl"???
Avatar
ptilou
Bonjour,

damien guerin wrote:
J'ai pondu ça à la mano sans rien tester...
Bon voilà maintenant, c'est tester :

open (IN, "< file.html");
open (OUT, ">out.tmp");
$cpt=0;
while ($line = <IN>) {
if ($line =~ /<HTML/) {
$cpt++;
close OUT;
rename "out.tmp", $cpt.".hml";
open (OUT, ">out.tmp");
}
print <OUT>, $line;


}

close OUT;

C'est quoi ton interpréteur perl "cut-perl"???


C'est le nom dans lequel j'ai sauvegarder le script !

Ptilou

Avatar
damien guerin
ah ok, pardon...!
Ben, chez moi ça roule en tout cas !
Avatar
ptilou
Bonjour,

ah ok, pardon...!
Ben, chez moi ça roule en tout cas !


Voila, chez moi ( j'en ai mare !)

~$ ./cut-perl Grd.html
./cut-perl: line 1: syntax error near unexpected token `IN,'
./cut-perl: line 1: `open (IN, "< file.html");'
Faut pas mettre split queque part ?


Ptilou

Avatar
Jacques Caron
Salut,

On 14 Jun 2005 07:42:34 -0700, wrote:

~$ ./cut-perl Grd.html
./cut-perl: line 1: syntax error near unexpected token `IN,'
./cut-perl: line 1: `open (IN, "< file.html");'
Faut pas mettre split queque part ?


Faut surtout mettre un #!/usr/bin/perl -w ou #!/usr/local/bin/perl -w au
début, sinon ton shell (bash) ne sait pas que c'est du perl...

Jacques.

1 2 3 4 5