Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1609 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Fichier excel en .txt....

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fichier excel en .txt....

n°802785
ladym
Posté le 22-07-2004 à 09:56:14  profilanswer
 

bonjour,
J'ai un fichier en excel que j'ouvre, le script marche convenablement grace au module :http://cpan.uwinnipeg.ca/dist/Spreadsheet-ParseExcel
mais maintenant ce que j'aimerai c'est copier l'ensemble des informations du fichier excel dans un fichier .txt.Est ce que c'est possible?si c'est le cas comment puis je le faire.
Voici mon code qui me permet d'ouvrir un fichier excel:

Code :
  1. #!c:/perl/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use Spreadsheet::ParseExcel;
  5. my $oBook =
  6.     Spreadsheet::ParseExcel::Workbook->Parse('c:\DoublePlay\Monfichier.xls');
  7. my($iR, $iC, $oWkS, $oWkC);
  8. foreach my $oWkS (@{$oBook->{Worksheet}}) {
  9.     print "--------- SHEET:", $oWkS->{Name}, "\n";
  10.     for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
  11.         for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
  12.             $oWkC = $oWkS->{Cells}[$iR][$iC];
  13.             print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
  14.         }
  15.     }
  16. }


Message édité par ladym le 22-07-2004 à 09:58:03
mood
Publicité
Posté le 22-07-2004 à 09:56:14  profilanswer
 

n°802857
ladym
Posté le 22-07-2004 à 11:00:50  profilanswer
 

en faite c'est bon je viens de trouver
pour qui sont interessés vioci le code

Code :
  1. #!c:/perl/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use Spreadsheet::ParseExcel;
  5. my @lignes=0;
  6. my $path = "c:\\progra~1\\VideoLAN\\VLC\\tt.txt";
  7. die "fichier non trouve !\n" if (! -s $path);
  8. open(FIC, ">>$path" ) or die "Can't open file: $!";
  9. @lignes = <FIC>;
  10. my $oBook =
  11.    
  12. Spreadsheet::ParseExcel::Workbook->Parse('c:\DoublePlay\DOCCANAL\PlanServiceBouquet9.xls')
  13. ;
  14. my($iR, $iC, $oWkS, $oWkC);
  15. foreach my $oWkS (@{$oBook->{Worksheet}}) {
  16.     print "--------- SHEET:", $oWkS->{Name}, "\n";
  17.     for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
  18. $iR++) {
  19.         for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
  20. $iC++) {
  21.             $oWkC = $oWkS->{Cells}[$iR][$iC];
  22.             print FIC "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
  23.         }
  24.     }
  25. }
  26. print $lignes[12];
  27. Close FIC;


 
 
mais j'ai un petit soucis quand je veux afficher une ligne de mon fichier .txt, j'ai l'erreur : suivante use of uninitialized value in print at line 37 cad celle la
"print $lignes[12];"

n°802920
ladym
Posté le 22-07-2004 à 11:34:57  profilanswer
 

j'essaye de mettre une boucle juste avant le "close FIC;"
comme ceci :

Code :
  1. for(my $j=0;$j< @lignes; $j++){
  2. print "je suis la2\n";
  3. print $lignes[$j];#affiche les éléments du tableau
  4. print $lignes[12];
  5. }


 
mais ça ne m'affiche rien est ce normal?j'ai essayé de le mettre entre chaque parenthèse mais ça ne marche pas non plus? que faire?

n°802936
pospos
Posté le 22-07-2004 à 11:45:27  profilanswer
 

my @lignes=0;  
 
ca passe ca?
fait un my @lignes tout court, ou bien my ligne = () (ca vient juste d'etre optimisé dans perl 5.8.5, donc mieux faut faire un simple my @lignes qui s'initialise tout seul plutot que l'initialiser deux fois si tu a une version de perl inferieure à 5.8.5 (ce qui est tres probable))
 
bon, sinon c'est le use warnings qui se plain ici:  
visiblement il y a moins de 13 lignes dans ton fichier, donc l'element 12 de ton tableau n'a pas été defini. si tu veux la 12emme ligne c'est $lignes[11] qu'il faut faire.
 
à part ca, pour ta boucle, en Perl pour iterer un tableau la meilleur solution est le foreach (en fait on le fait avec un for):
 
for (@lignes) {
  print $_, "\n";
}
 
et si tu veux connaitre la taille de ton tableau tu l'evalu dans un contexte scalaire (comme tu a fais dans ta boucle for):
 
print scalar(@lignes);
ou
print @lignes+0;
 
(si tu fait 'print @lignes' tout court il est evalué en contexte de liste car print s'attend à recevoir une liste)
 
ca te donne le nombre totale d'element du tableau, et donc le dernier element de ce tableau sera sa taille-1 (puisqu'il commence à 0)
 
tu peux aussi recuperer le rang du dernier element (donc taille-1) comme ca:
print $#lignes;
 
la, plus de porbleme de contexte scalair ou liste

n°802962
ladym
Posté le 22-07-2004 à 12:02:11  profilanswer
 

non ça ne marche pas que je mette my @lignes=0; ou my @lignes;  
j'ai toujours la même erreur. mais ce que je ne comprends pas c'est que mon tableau est assez grand car j'ai bcp d'element dedans donc que je mette 12 ou 11 ça devrait quand même m'afficher quelque chose?
- pour le parcours de mon tableau même en utilisant le foreach je n'ai rien qui s'affiche.
- en faite je travaille sous perl 5.6

n°802979
pospos
Posté le 22-07-2004 à 12:12:57  profilanswer
 

bon ok:
 
  open(FIC, ">>$path" ) or die "Can't open file: $!";  
  @lignes = <FIC>;  
 
la tu ouvre ton fichier en ecriture (et en ajout) !
 
donc tu ne peut pas lire dedans en meme temps!
 
si tu veux à la fois lire et ecrire il faut faire des trucs genre open(FIC, '+>>', $file), mais bon je te conseil d'eviter ca pour l'instant
 
regarde la doc (perlopentut)
 
en fait je comprend pas trop ce que tu veux faire?
 
tu veux verifier que ton fichier txt est bien ecrit? dans ce cas il faut le refermer et le réouvire en lecture, puis faire ton @lignes = <IN>
 
donc d'abord tu lourvre en ecriture (et en ajout si tu veux)
 
open(OUT, '>', $file)
 
et ensuite à la fin tu le close et le réouvre en lecture :
 
open(IN, '<', $file)

n°803011
ladym
Posté le 22-07-2004 à 12:30:18  profilanswer
 

oui c'est ça merci ça marche
mais qd je lui demande de m'afficher une des lignes de mon fichier, elle me l'affiche en plusieurs fois? est ce normal?
je mets ce code juste avant le "close FIC;"

Code :
  1. open(FIC, '<', $path) or die "Can't open file: $!"; # pour revenir au début du fichier
  2. while( <FIC> ) {
  3.   push @lignes, $_;
  4.   print $lignes[3];
  5. }
  6. close FIC;


 
concrétement j'aimerais que ça m'affiche toutes les 5èmes lignes de mon fichiers?comment faire?

n°803019
ladym
Posté le 22-07-2004 à 12:42:16  profilanswer
 

je fais une boucle pour qu'il m'affiche toutes les 5èmes lignes de mon fichier mais j'ai une boucle infinie

Code :
  1. for (my $j=11; $j< @lignes; $j+5){
  2. print $lignes[$j];#affiche les éléments du tableau
  3. }

n°803021
pospos
Posté le 22-07-2004 à 12:44:32  profilanswer
 

toutes les lignes multiples de 5?
 
tu peux faire ca:

Code :
  1. while( <FIC> ) { 
  2.       push @lignes;
  3.       print unless $.%5; 
  4.   }


 
par defaut push et print vont bosser sur $_
$. est le compteur de ligne, une variable speciale de perl.
la on regarde si le modulo 5 est nul, et si c'est le cas on affiche

n°803219
ladym
Posté le 22-07-2004 à 15:03:58  profilanswer
 

j'ai testé ça na marche pas, en faite je voualis savoir savez vous comment je peux faire pour selectionner les informations qui sont dans la colonne dont le nom est @multicast?faut il que j'utilise des motif?

mood
Publicité
Posté le 22-07-2004 à 15:03:58  profilanswer
 

n°803244
pospos
Posté le 22-07-2004 à 15:18:26  profilanswer
 

tu parlais de 5eme ligne
la tu veux la 5eme colonne (!)
 
oui il va falloir que tu fasse une regexp, ou peut etre un simple split, suivant à koi ressemble tes lignes
 
tu a l'air de t'etre lancé dans tout ca sans vraiment avoir appris le Perl (d'apres tes autres posts egalement). Je te conseil de te procurer des tutoriel et boukins

n°803428
ladym
Posté le 22-07-2004 à 16:36:52  profilanswer
 

c'est ce que j'ai fait!!mais j'y connais rien


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Fichier excel en .txt....

 

Sujets relatifs
creer un fichier excelNombre de ligne d'un fichier texte ouvert sous Excel
Affichage d'un fichier excel dans un WinFormAffichage dans fichier Excel : convertir les nombres en "texte"
charger un fichier csv sur une feuille ExcelComment Faire pour lire un fichier en format excel
Modifier un fichier ExcelChanger le couleur d'une cellule d'un fichier Excel
Initialisation des labels à partir d'un fichier excelsupprimer un fichier texte depuis le vba/excel ????
Plus de sujets relatifs à : Fichier excel en .txt....


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR