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 :

test dans un fichier ligne par ligne


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut test dans un fichier ligne par ligne
    Salut

    Debutant en Perl, j´ai une preoccupation.
    je sais lire tout un fichier ligne par ligne, mais ce que je voudrai faire c´est ceci:

    soit ce fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ville1 paris
    ville2 marseille
    ville3 lyon
    ville4 brest
    ...
    etc
    ville15 Tours
    je voudrai que simultanement en faisant la lecture, le programme verifie la ligne actuelle lu et la ligne suivante a lire avant de faire les affectations.

    par exemple:
    Si ville1 et ville2 existent alors affecter à une variable par exemple x<-paris et y<-marseille

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Salut,

    Et si tu voyais ton problème autrement ? Disons qu'il te faut lire la ligne actuelle et la ligne précédente (ce qui reviens au même donc). Tu verrais déjà mieux comment faire ?

    Si tu ne comprends pas ce que je veux dire, je clarifierais bien sûr.
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    bien evidemment le probleme reste le meme si on doit lire la ligne d´avant.... moi j´ai reflechit en avant tout simplement.

  4. #4
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Ah bah non, le problème ne reste pas le même, c'est bien plus facile ! Il te suffit de garder le message précédent dans une variable, et hop, le tour est joué
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    merci , c´est gentil mais un exemple m´avancerait bcp. Et comment incrementer a la ligne suivante? ou garder l´indice de la ligne precedente?

  6. #6
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Voilà un petit code qui je pense ferais ce que tu veux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open (FIC, "<tonfichier.txt") or die "Erreur : $!";
    my $ligne_prec = <FIC>;
    for (my $i = 2, my $ligne= <FIC>, $i++)
    {
        #ici, $ligne_prec contient la ligne précédente, $ligne la nouvelle, et $i l'ince de la ligne en cours (1 pour la première)
        #tu fais ton traitement
        $ligne_prec = $ligne;
    }
    Ca te vas ?
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Ok merci j´essaie de voir la demarche... Mais il manque pas par hasard une boucle While? comment le ficher est t-il parcouru? juste avec la boucle "for"?

  8. #8
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Et bien, regarde la condition de sortie de la boucle for, elle ne concerne pas la variable $i. En fait, c'est exactement la même condition que celle que tu mettrais dans une boucle while. J'ai utilisé une boucle for uniquement pour que tu puisses diposer d'un compteur de ligne
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  9. #9
    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 Woufeil
    Et bien, regarde la condition de sortie de la boucle for, elle ne concerne pas la variable $i. En fait, c'est exactement la même condition que celle que tu mettrais dans une boucle while. J'ai utilisé une boucle for uniquement pour que tu puisses diposer d'un compteur de ligne ;)
    Mauvaise idée... D'autant que la boucle for s'écrit for(;;) et pas for(,,) et que sous cette forme Perl ne rajoute pas automatiquement la fonction defined() indispensable pour être sûr qu'on a bien atteint la fin du fichier et pas simplement une ligne à la valeur fausse.
    $. prend automatiquement la valeur du numéro de l'enregistrement qu'on vient de lire, autrement dit dans le cas général, $. est égal au numéro de ligne (puisque les enregistrements sont séparés par $/ qui est par défaut "\n") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    open my $input, '<', "tonfichier.txt" 
        or die "Erreur : $!";
    my $ligne_prec = <$input>;
    while( my $ligne = <$input> ) {
     
        #ici, $ligne_prec contient la ligne précédente, $ligne la nouvelle, et $. le numéro de la ligne en cours (1 pour la première)
        #tu fais ton traitement
        $ligne_prec = $ligne;
    }
    --
    Jedaï

  10. #10
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Peite faut d'innatention pour la forme du for, par contre pour la condition je ne savais pas... Tu sais à quoi c'est du ?
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. Opération sur un fichier et lecture ligne par ligne
    Par teunniq dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/06/2014, 17h57
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. Réponses: 12
    Dernier message: 14/05/2008, 17h15

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