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 :

Afficher et parser ligne d'un fichier


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut Afficher et parser ligne d'un fichier
    Bonjour à tous,

    je dois faire un petit script d'analyse de fichier pour un projet, et je me suis dit que ce serait l'occasion d'avoir un premier contact avec perl.

    Dans un premier temps, il me faudrait affichier la i-ème ligne d'un fichier. Cette ligne est de la forme :

    >r109688:0..1-r115328:2..129-r111995:0..117-r119630:0..170-r109920:0..170-r104033:0..170-r107294:0..153-r123176:0..170-r125208:0..170-r106452:0..170-r120998:0..170-r116881:100..100
    J'aimerais y récupérer un par un, les chiffres de la compris entre un "r" et ":"...

    Pourriez vous m'aider à faire ces 2 choses en perl s'il vous plait?
    Merci beaucoup en tout cas, et bonne soirée.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tu ouvres ton fichier avec la commande open.

    Ensuite, tu parcours les lignes du fichier et t'arrêtes quand $. est égal au numéro de ta ligne ($. contient le numéro de ligne du fichier lu).

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $num_ligne = 17;
    my $fichier = "toto.txt";
    open my $FIC, "<", $fichier or die "ne peux ouvrir $fichier $! \n";
    while (my $ligne = <$FIC>) {
         next unless $. == $num_ligne; # saute à la ligne suivante si ce n'est pas la bonne
         #ici le code pour traiter ta ligne numéro $num_ligne
    }
    Pour parser ta ligne et récupérer tous les nombres, examine ce test rapide sous le debugger Perl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      DB<1> $c = ">r109688:0..1-r115328:2..129-r111995:0..117-r119630:0..170-r109920:0..170-r104033:0..170-r107294:0..153-r123176:0..170-r125208:0..170-r106452:0..170-r120998:0..170-r116881:100..100";
     
      DB<2> @d = $c =~ /(\d+)/g;
    le tableau @d contient maintenant tous les groupes de chiffres comme on peut le voir ci-dessous:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
      DB<3> x @d
    0  109688
    1  0
    2  1
    3  115328
    4  2
    5  129
    6  111995
    7  0
    8  117
    9  119630
    10  0
    11  170
    12  109920
    13  0
    14  170
    15  104033
    16  0
    17  170
    18  107294
    19  0
    20  153
    21  123176
    22  0
    23  170
    24  125208
    25  0
    26  170
    27  106452
    28  0
    29  170
    30  120998
    31  0
    32  170
    33  116881
    34  100
    35  100
      DB<4>
    A voir si cela te convient. Sinon, explique plus en détails ce que tu veux faire avec cette ligne.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Alba.1337 Voir le message
    J'aimerais y récupérer un par un, les chiffres de la compris entre un "r" et ":"...
    Prends la réponse de Lolo mais il me semble que tu ne veux récupérer que XXXXXXX dans l'expression rXXXXXXX???

    Dans ce cas, le dernier bout de code de Lolo deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DB<1> $c = ">r109688:0..1-r115328:2..129-r111995:0..117-r119630:0..170-r109920:0..170-r104033:0..170-r107294:0..153-r123176:0..170-r125208:0..170-r106452:0..170-r120998:0..170-r116881:100..100";
     
    DB<2> @d = $c =~ /r(\d+):/g;

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    6ril23, ton code récupère tous les nombres situés entre 'r' et ':', et Alba.1337 semble vouloir tous les chiffres situés entre 'r' et ':' (mais lequel, le premier de la ligne, le 2e, tous ?).

    Pour récupérer tous les chiffres de chaque nombre situé entre un 'r' et un ':', il faut donc ajouter à ton expression, une boucle parcourant @d et découpant chaque nombre en chiffres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $nombre (@d) {
      my @chiffres = split //, $nombre;
      # traitement
    }
    A moins qu'il s'agisse de ne récupérer que les chiffres du premier nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my ($d) = $c =~ /r(\d+):/;
    my @chiffres = split //, $d;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    6ril23, ton code récupère tous les nombres situés entre 'r' et ':', et semble vouloir tous les chiffres situés entre 'r' et ':' (mais lequel, le premier de la ligne, le 2e, tous ?).
    oui j'ai oublié le split

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup de votre aide, je vais pouvoir avancer.

    Je me suis mal exprimé, c'est en effet les nombres que je souhaitais récupérer, désolé...

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Explicite exactement et en détail ce que tu veux récupérer dans la ligne de ton fichier, pour l'instant ce n'est pas assez clair.

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Alba, pense à mettre "Résolu" si c'est le cas, sinon dis-nous ce qui te bloque encore

Discussions similaires

  1. Afficher une certaine ligne d'un fichier texte.
    Par lostsoul dans le forum Général Java
    Réponses: 6
    Dernier message: 18/11/2013, 04h33
  2. [PowerShell] Comment afficher la dernière ligne d'un fichier CSV ?
    Par johnvlesk dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/11/2010, 22h47
  3. Réponses: 6
    Dernier message: 22/09/2008, 15h52
  4. comment afficher la nième ligne d'un fichier?
    Par dhay06 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 10/05/2008, 14h20
  5. Afficher les lignes d'un fichier
    Par pepere73 dans le forum C++
    Réponses: 16
    Dernier message: 21/02/2005, 23h25

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