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 :

[langage] longueur d'une chaine lue ds un fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 48
    Points
    48
    Par défaut [langage] longueur d'une chaine lue ds un fichier
    Bonjour,
    j'aimerais manipuler un fichier qui contient une très longue chaine de caractères(environ 200) sur une seule ligne, puis après appliquer des fonctions à cette chaine ( compter la longueur de cette chaine, par exemple,...)

    Dc je me suis aidée du code donné à papyperl, mais cane marche tjrs pas!
    car moi je veux récupérer tous les caractères du fichier ds une chaine et non pas dans un tableau
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #!/usr/bin/perl 
     
    use strict;
     
    my $fichier;
    my $sequence;
    my $longueur;
     
     
    print " nom du fichier a traiter : ";
    chomp ($fichier = <STDIN>); 
     
    open (FIC , "$fichier") || die "Probleme d'ouverture: $!"; 
    while ($sequence = <FIC>) 
    { 
    chomp $sequence;
    }
     
    print $sequence;
    close FIC;
     
     
    $longueur=length($sequence);
    print "\nlongueur de la seq $longueur\n";
    le résultat n'est pas celui que j'attends car il me dise que la longueur de la séquence est de 0

    merci d'avance

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    bah en fait, ton code va fonctionner si t'as seulement ta longue ligne dans ton fichier. Par contre, si tu as ne serais-ce qu'une ligne blanche à la fin, bah $sequence=ligne blanche donc longueur = 0.
    Sol à tester :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #!/usr/bin/perl 
     
    use strict; 
     
    my $fichier; 
    my $sequence; 
    my $longueur; 
     
     
    print " nom du fichier a traiter : "; 
    chomp ($fichier = <STDIN>); 
     
    open (FIC , "$fichier") || die "Probleme d'ouverture: $!"; 
    while ($sequence = <FIC>) 
    { 
    $sequence.=$sequence;
    chomp $sequence; 
    } 
     
    print $sequence; 
    close FIC; 
     
     
    $longueur=length($sequence); 
    print "\nlongueur de la seq $longueur\n"
    Verre vide je te plains, verre plein, je te vide.

  3. #3
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Petit pb au niveau du $sequence .= $sequence donc tjs à 0.
    J'ajoute une variable temporaire.

    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
    17
    18
    #!/usr/bin/perl
    use strict;
    my $fichier;
    my $sequence;
    my $seq;
    my $longueur;
    print " nom du fichier a traiter : ";
    chomp ($fichier = <STDIN>);
    open (FIC , "$fichier") || die "Probleme d'ouverture: $!";
    while ($seq = <FIC>)
    {
    chomp $seq;
    $sequence.=$seq;
    }
    print $sequence;
    close FIC;
    $longueur=length($sequence);
    print "\nlongueur de la seq $longueur\n"
    Je pense que ca marche. Lancé sur la source du script j'obtiens 355.
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    ca ne marche tjrs pas avec aucun des deux codes,
    j'ai retapé un autre fichier ( une ligne de 20 caractères) pour être sûre qu'il n'y a pas de retour à la ligne.

    voici ce que j'obtiens
    nom du fichier a traiter : essai
    Use of uninitialized value in scalar chomp at ./longue_sequence.pl line 16, <FIC> line 1.
    Use of uninitialized value in concatenation (.) or string at ./longue_sequence.pl line 17, <FIC> line 1.
    Use of uninitialized value in print at ./longue_sequence.pl line 21, <FIC> line 1.
    Use of uninitialized value in length at ./longue_sequence.pl line 24.

    longueur de la seq 0
    [/code]

  5. #5
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Excellente remarque de Choupi !

    Sinon, code testé, fonctionnel et sans warnings.
    Verre vide je te plains, verre plein, je te vide.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    oui !!!!!!!!!
    ca y est!!!!!!
    merci , je ne sias pas pourquoi ca ne marchait pas avant mais maintenant ca marche , cool!
    merci à vous

  7. #7
    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
    Bon bah c'est bien que ça marche, mais c'est peut-être pas la peine de faire bosser perl pour couper le fichier en lignes puis de réunir toutes les lignes, non ??
    Y a un idiome très pratique pour faire ça, c'est :
    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
     
    #!/usr/bin/perl
    use strict;
     
    my ($fichier, $sequence, $longueur);
     
    print " nom du fichier a traiter : ";
    chomp ($fichier = <STDIN>);
    open (FIC , "$fichier") || die "Probleme d'ouverture: $!";
     
    { local $/; $sequence = <FIC> }
     
    print $sequence;
    close FIC;
    $longueur=length($sequence);
    print "\nlongueur de la seq $longueur\n"
    Y a quand même une petite différence avec le code au-dessus, c'est que les passages à la lignes sont conservés, mais c'est un comportement qui est souvent souhaitable, et même s'il s'agissait d'une erreur, un tr/\n//d y remédierait sans doute plus vite que la solution précédente...
    Pour plus de détails et un tas de trucs pratique pour traiter des fichiers en Perl, voir http://www.perl.com/pub/a/2004/06/18/variables.html .


    --
    Jedaï

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/07/2006, 15h42
  2. Tester la longueur d'une chaine de caractères
    Par greg64 dans le forum IHM
    Réponses: 9
    Dernier message: 12/06/2006, 15h54
  3. longueur d'une chaine ...
    Par adrien954 dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2005, 12h56
  4. [langage] récupération d'une chaine
    Par sasame dans le forum Langage
    Réponses: 11
    Dernier message: 21/01/2005, 07h33
  5. Réponses: 2
    Dernier message: 30/03/2004, 11h31

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