IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Ouverture de plusieurs fichiers en boucle


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Ouverture de plusieurs fichiers en boucle
    Bonjour à tous, c'est mon premier post sur le forum de la communauté!
    J'ai besoin d'aide sur une ouverture de fichiers:
    Je voudrai faire (en gros) Ouverture de fichiers"i" par une boucle for

    for(my $i = 0;i<=4;i++)
    {
    open(file.$i, '<File'.$i.'txt');
    }

    Problème, je n'ai pas trouvé d'aide la dessus (mm sur Google)

    Merci de votre aide par avance!

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Bienvenue sur ce forum. Utilise les balises CODE, ça rendra ton script plus lisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open(FILE, way/file) or die $!;
     
    while( my $line = <FILE>){
     
    }
    close(FILE);
    Ici, c'est une ouverture en mode lecture, va voir dans la FAQ si tu as besoin de plus d'explications.
    http://perl.developpez.com/faq/?page=sectionC1

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    @Jasmine : je pense que son problème c'est ouvrir une liste de fichier, pas en ouvrir un.

    Premièrement, je remarque qu'ouvrir simultanément une grande quantité de fichier est à déconseiller (quel que soit le langage : l'OS impose une limite au nombre de fichiers ouverts simultanément par un processus donné). Mon conseil serait plutôt d'ouvrir un fichier à la fois, le traiter, le fermer et passer au suivant.

    Ce qui donnerait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my $file;
    foreach my $i (0..4) {
      open $file, '<', "File$i.txt"
        or die "Can't open File$i.txt : $!\n";
     
      while( <$file> ) {
        # work
      }
     
      close $file;
    }
    --
    Jedaï

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour!

    Ce que tu m''a ecris Jedaï m'interesse, je teste ca dans la journée, je vous tiens au courant!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Ca ne marche pas
    Mon systeme tourne en rond.
    Je vais donc vous parler un peu plus de mon objectif.
    J'ai un fichier A et un fichier B
    Ce que je veux faire:

    Ouvrir le fichier A
    Pour chaque motde A
    Pour chaque mot de B
    Comparer les mots
    Fin pour
    fin pour
    Fermer A
    Fermer B

    Cet algo codé en Perl Fonctionne parfaitement.
    Maintenant, je n'ai pas 1 fichier B mais deux fichiers B et C
    C'est pourquoi je vous ai demander d'ouvrir en boucle les fichiers pour ne pas doubler le code.
    Jedaï, que veut dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      open $file, '<', "File$i.txt"
    C'est surtout le "'<'" que je ne comprend pas: normalement tu ne met pas un nom de variable?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Pardon, c'est débile ma remarque: le < veut dire que c'est une lecture.
    Cependant, avec le code, je n'arrive pas a passer dans la boucle While :s
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach my $t (0..1) {
          open $file, '<',"File".$t."txt" || die "Can't open File$t.txt : $! \n";
          chomp(my @lignes_fichierCompare = <$file>);	#Remplir un tableau avec le contenu du fichier
          #PAs de passage dans la boucle WHILE
          while(<$file>)
          {
                print "Passage dans la boucle While!!!!!!";
           }
           close $file;
    }
    Qu'est ce qui se passe?????

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    Franchement, pourquoi t'embête-tu à traiter une ouverture de fichier + récupération du contenu par une boucle ?

    Pourquoi ne pas plutôt mettre le tout dans une fonction ???

    Ainsi, chaque appel à la fonction = ouverture du fichier, récupération de son contenu.

    T'es en train de te prendre le chou sur une boucle for pour rien en fait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    my @liste = TraiteFichier("File$t.txt");
     
    sub TraiteFichier
    {
        my $fichier = shift();
        my @retour;
     
        open(FILE, $fichier) or die;
        while(<FILE>)
        {
            chomp();
            push(@retour, $_);     # juste un exemple
        }
        close(FILE);
        return(@retour);
    }

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Didi34 Voir le message
    Qu'est ce qui se passe?????
    Tu lis l'intégralité du fichier avant d'entrer dans la boucle... Donc il ne reste plus rien à lire dans la boucle, il serait bon de réviser l'IO de base en Perl, nous avons une FAQ avec pas mal d'exemple pour ça.

    --
    Jedaï

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    C'est bon j'ai réussi a faire mon script merci a tous.
    Jedaï, je vais faire un tour en effet sur la FAQ ( en mm tps, je ne fais que débuter en perl alors... c'est justifiable lol!)

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Didi34 Voir le message
    Jedaï, je vais faire un tour en effet sur la FAQ ( en mm tps, je ne fais que débuter en perl alors... c'est justifiable lol!)
    Ce n'était pas une critique, juste un conseil
    Et puis c'est bien pour ça qu'on a fait cette FAQ après tout.


    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] ouverture de plusieurs fichiers
    Par mygwel dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/03/2009, 13h01
  2. Ouverture de plusieurs fichiers en même temps ?
    Par nicolas.sitbon dans le forum POSIX
    Réponses: 42
    Dernier message: 08/08/2008, 00h35
  3. [VB6] Ouverture de plusieurs fichiers textes
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/09/2006, 11h45
  4. Eclipse : ouverture de plusieurs fichiers
    Par menuge dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/05/2006, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo