Longueur dynamique d'un fichier xls. en perl

Résolu/Fermé
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009 - 8 oct. 2007 à 13:57
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 oct. 2007 à 17:24
Bonjour,

J'ai un fichier excel et je dois le parcourir pour ensuite créer un csv. Pour le parcourir, j'utilise un pour ... fin pour. Mais les valeurs que j'y donne ne sont pas dynamique.
ex : foreach my $row (1 ... 166)
{
...
...
}
J'aimerais qu'il parcoure le fichier jusqu'à qu'il rencontre une ligne blanche. Dans mon cas, la ligne blanche est la 167 - 1 = 166.

Comment faire ? Merci
A voir également:

6 réponses

VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
9 oct. 2007 à 10:17
Allez, svp de l'aide. Merci
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 oct. 2007 à 14:03
Salut,

Allez, svp de l'aide. Merci

Encore toi?!!! ;-))

Je vais jeter un coup d'oeil :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 oct. 2007 à 14:09
tu peux faire comme ça

#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;

open F,">>resultat.csv"
   or die "E/S : $!\n";

#my $file = "keo4cUWzZ8_Test.xls";
my $file = "kflrssGMyz_Test.xls";
#my $file = "Test.xls";
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
my $sheet = ${$excel->{Worksheet}}[0];

foreach my $row (0 ... 65535){
  next unless  my $cell1 = $sheet->{Cells}[$row][0];
  my $cell2 = $sheet->{Cells}[$row][1];
  my $cell3 = $sheet->{Cells}[$row][2];
  my $cell4 = $sheet->{Cells}[$row][3];
  $cell4->{Val} =~s/[()]//g;
  $cell4->{Val} =~s/\D//g;
  $cell4->{Val} =~s/(?<=\d)(?=\d)/,/g;

#  my $cell5 = $sheet->{Cells}[$row][4];

#  my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
  my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};";
  $res =~s/\n//;
  $res =~s/\x01\x53/oe/g;
  $res =~s/\x00//g;
  print "$res\n";
}
__END__

Donc si la cellule de la colone 1 est vide le rang est sauté
Ca te conviens comme ça?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 oct. 2007 à 15:23
ou
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;
my $nbligne;
open F,">>resultat.csv"
   or die "E/S : $!\n";

my $file = "kflrssGMyz_Test.xls";
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
my $sheet = ${$excel->{Worksheet}}[0];

foreach my $row (0 ... eof){
  $nbligne++ if my $cell1 = $sheet->{Cells}[$row][0];
}

foreach my $row (0 ... $nbligne){
  my $cell1 = $sheet->{Cells}[$row][0];
  my $cell2 = $sheet->{Cells}[$row][1];
  my $cell3 = $sheet->{Cells}[$row][2];
  my $cell4 = $sheet->{Cells}[$row][3];
  $cell4->{Val} =~s/[()]//g;
  $cell4->{Val} =~s/\D//g;
  $cell4->{Val} =~s/(?<=\d)(?=\d)/,/g;

#  my $cell5 = $sheet->{Cells}[$row][4];

#  my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
  my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};";
  $res =~s/\n//;
  $res =~s/\x01\x53/oe/g;
  $res =~s/\x00//g;
  print "$res\n";
}
__END__
0

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

Posez votre question
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
9 oct. 2007 à 17:07
Ouais encore moi, lol.
J'ai pris ta solution 2 qui marche presque. A la place de eof dans ta boucle, j'ai rentré 65535, sinon il ne m'écrivait que les 2 premières lignes dans le csv.
Bon ben encore merci de ton aide. La prochaine fois, je te joins directement. Lol.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 oct. 2007 à 17:24
je te joins directement. Lol

tu peux toujours demander ici, ainsi la communauté peut profiter de la solution ;-))
0