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

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Ouverture de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Ouverture de fichier

n°835178
vanilla
datoune's revival
Posté le 28-08-2004 à 16:47:54  profilanswer
 

Bonjour,  
J'ai un fichier toto.txt qui ressemble à qqchose comme ceci :
 


bla bla bla
*
toto tati tata
tutu toto
tata titi
*
foo foo bar bar
bar foo


 
J'aimerais afficher aléatoirement un des 3 ensembles : quelle genre de fonction je peux utiliser ?


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le 28-08-2004 à 16:47:54  profilanswer
 

n°835358
burgergold
5$? va chez l'diable!
Posté le 29-08-2004 à 04:09:32  profilanswer
 

"un des 3 ensembles"
 
ton séparateur c'est le * ?
pk tu t'ajoutes pas un ID d'ensemble, du genre
 
1 bla bla bla  
2 toto tati tata  
2 tutu toto  
2 tata titi  
3 foo foo bar bar  
3 bar foo

n°835475
vanilla
datoune's revival
Posté le 29-08-2004 à 13:13:57  profilanswer
 

Parce que le fichier est lu par des personnes humaines donc mettre des 1 22 3 3 devant ça le fais pas trop :/


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835508
burgergold
5$? va chez l'diable!
Posté le 29-08-2004 à 15:02:15  profilanswer
 

réponse idiote
 
tu complique énormément ton truc si tu utilise des * pour diviser tes sections

n°835513
vanilla
datoune's revival
Posté le 29-08-2004 à 15:10:35  profilanswer
 

Je peux très bien utiliser un autre caractère mais je peux pas mettre des 11 22 33  [:spamafote]


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835514
burgergold
5$? va chez l'diable!
Posté le 29-08-2004 à 15:12:36  profilanswer
 

c'est pas le caractère qui complique, c'est la facon de séparer tes sections
 
bon laisse moi 2 min et jte ponds quelque chose

n°835515
vanilla
datoune's revival
Posté le 29-08-2004 à 15:15:28  profilanswer
 

C'est gentil, si tu y arrives pas te casser pas la tête...


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835516
burgergold
5$? va chez l'diable!
Posté le 29-08-2004 à 15:17:22  profilanswer
 

Code :
  1. my $file = 'C:\monfichier.txt';
  2. open(FENT, '< ' . $file);
  3. my @lines = <FENT>;
  4. close FENT;
  5. my $i;
  6. my @array;
  7. foreach my $line (@lines) {
  8.   $line =~ s/\n//g;
  9.   if ($line eq '*') {
  10.     $i++;
  11.   }
  12.   else {
  13.     push(@{$array[$i]}, $line);
  14.   }
  15. }


 
à partir de là, reste plus qu'à faire un petit truc pour afficher aléatoirement

n°835534
vanilla
datoune's revival
Posté le 29-08-2004 à 15:40:01  profilanswer
 

Merci :jap:


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°836192
pospos
Posté le 30-08-2004 à 10:37:02  profilanswer
 

on peut modifier le separateur de ligne de Perl $/ :
 

Code :
  1. my $file = 'C:\monfichier.txt';
  2. if (open(FENT, '<', $file)) {
  3.   local $/ = '*';
  4.   my @sections = <FENT>;
  5.   close(FENT);
  6.   chomp @sections;
  7.   # affichage aléatoire d'une section:
  8.   print $sections[rand(@sections)];
  9. } else {
  10.   die 'ouverture du fichier impossible';
  11. }


Message édité par pospos le 30-08-2004 à 10:37:41
mood
Publicité
Posté le 30-08-2004 à 10:37:02  profilanswer
 

n°837076
vanilla
datoune's revival
Posté le 30-08-2004 à 20:27:59  profilanswer
 

Effectivement, je trouve ce code plus compréhensible.
 
Par contre il reste un petit problème, c'est quand le random choisit les 2 blocs du bas : il y a une ligne vide.
 
En gros (en ademttant que random choisissent les 3 blocs en appelant 3x le programme)


$ perl test.pl
 
toto tati tata
tutu toto
tata titi  
$ perl test.pl
 
foo foo bar bar
bar foo  
$ perl test.pl
bla bla bla  


 
Merci bcp [:romf]


Message édité par vanilla le 30-08-2004 à 20:28:33
n°837078
Taz
bisounours-codeur
Posté le 30-08-2004 à 20:30:31  profilanswer
 

perl sous windows ... le pauvre, il aura vraiment subit le dernier des outrages :o

n°837400
pospos
Posté le 31-08-2004 à 09:39:05  profilanswer
 

dans ce cas tu peux essayer $/="\n*", ou meme $/="\n*\n";
 
le role de l'instruction chomp est d'enlever le separateur de ligne (donc "\n" en temps normal" ) de chaque ligne du tableau. Dans notre cas ca va supprimer le string $/


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

  [Perl] Ouverture de fichier

 

Sujets relatifs
[C] : écriture dans un fichier linuxPlantage appli perl/tk lors d'une boucle ?
Vérifier l'existance d'un fichier xls en VB[libc] tester si un fichier existe
[VC++6] Sauvegarde d'une view en fichier bmp[JAVA] Copie de fichier et destination inexistante
Comment partagé un fichier excel en VBA ??Batch + roulement de fichier
Droits d'accès pour envoie de fichier par formulaire[C++/wxWidgets/MSW] Savoir si un fichier est système
Plus de sujets relatifs à : [Perl] Ouverture de fichier


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)