[Perl] Ouverture de fichier

Ouverture de fichier [Perl] - Perl - Programmation

Marsh Posté le 28-08-2004 à 16:47:54    

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
Reply

Marsh Posté le 28-08-2004 à 16:47:54   

Reply

Marsh Posté le 29-08-2004 à 04:09:32    

"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

Reply

Marsh Posté le 29-08-2004 à 13:13:57    

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
Reply

Marsh Posté le 29-08-2004 à 15:02:15    

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

Reply

Marsh Posté le 29-08-2004 à 15:10:35    

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
Reply

Marsh Posté le 29-08-2004 à 15:12:36    

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

Reply

Marsh Posté le 29-08-2004 à 15:15:28    

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
Reply

Marsh Posté le 29-08-2004 à 15:17:22    

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

Reply

Marsh Posté le 29-08-2004 à 15:40:01    

Merci :jap:


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
Reply

Marsh Posté le 30-08-2004 à 10:37:02    

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
Reply

Marsh Posté le 30-08-2004 à 10:37:02   

Reply

Marsh Posté le 30-08-2004 à 20:27:59    

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
Reply

Marsh Posté le 30-08-2004 à 20:30:31    

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

Reply

Marsh Posté le 31-08-2004 à 09:39:05    

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 $/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed