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 :

Comment assigner chaque ligne trouvée à une variable ?


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 41
    Points
    41
    Par défaut Comment assigner chaque ligne trouvée à une variable ?
    Bonsoir à tous,

    Je préfère préciser que je débute en perl
    Bref, voilà ce que j'aimerais faire :

    J'ai un fichier de log construit à partir du programme mplayer qui identifie tout le contenu de mon dvd, le voici :

    blablabla ...
    ID_DVD_TITLES=6
    ID_DVD_TITLE_1_CHAPTERS=13
    ID_DVD_TITLE_1_ANGLES=1
    ID_DVD_TITLE_2_CHAPTERS=1
    ID_DVD_TITLE_2_ANGLES=1
    ID_DVD_TITLE_3_CHAPTERS=1
    ID_DVD_TITLE_3_ANGLES=1
    ID_DVD_TITLE_4_CHAPTERS=1
    ID_DVD_TITLE_4_ANGLES=1
    ID_DVD_TITLE_5_CHAPTERS=1
    ID_DVD_TITLE_5_ANGLES=1
    ID_DVD_TITLE_6_CHAPTERS=1
    ID_DVD_TITLE_6_ANGLES=1
    ID_DVD_TITLE_1_LENGTH=5924.440
    ID_DVD_TITLE_2_LENGTH=139.680
    ID_DVD_TITLE_3_LENGTH=410.040
    ID_DVD_TITLE_4_LENGTH=1275.040
    ID_DVD_TITLE_5_LENGTH=192.840
    ID_DVD_TITLE_6_LENGTH=287.040

    ID_DVD_DISC_ID=16925C954A7891F7C607B78D51E4E2C8
    Il y a 6 titres sur ce DVD.
    ID_DVD_CURRENT_TITLE=1
    Il y a 13 chapitres sur ce titre DVD.
    Il y a 1 angles sur ce titre DVD.
    etc etc ....
    J'aimerai récupérer tout ce qui est en gras et assigner à chaque ligne trouvée, une variable ... en sachant que ces lignes ("ID_DVD_TITLE_X_LENGTH") sont variables selon les dvd.

    Par la suite, j'aimerai récupérer pour chaque variable, le chiffre après "ID_DVD_TITLE_X_LENGTH=" et le passer à la moulinette afin de transformer ces secondes (ce sont des secondes) en heures, minutes secondes ... mais ça ne sera pas un problème.

    Et enfin, faire quelque chose de ce genre lors du lancement :

    Il y a "n" titres sur ce dvd :
    - Titre 1 : 25 minutes
    - Titre 2 : 1 heures 30 minutes
    - Titre "n" : ........
    J'ai commencé à écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    open (fichier, 'info.log');
        $i=0;
       while( $ligne = <fichier> ) {
     
    	if ( $ligne =~ m/^ID_DVD_TITLE_\d+_LENGTH*/ ) {
    		print $ligne;
    		$i++;
    	}
         }
          close fichier;
         print "nombre de titres sur le dvd : $i\n";
    Et ca marche :

    ./test2.pl
    ID_DVD_TITLE_1_LENGTH=5924.440
    ID_DVD_TITLE_2_LENGTH=139.680
    ID_DVD_TITLE_3_LENGTH=410.040
    ID_DVD_TITLE_4_LENGTH=1275.040
    ID_DVD_TITLE_5_LENGTH=192.840
    ID_DVD_TITLE_6_LENGTH=287.040
    nombre de titres sur le dvd : 6
    Par contre je suis complètement paumé et je ne sais pas trop quoi utiliser pour assigner chaque ligne trouvé a une variable ... (tableau de hash ?).

    Note : Je n'utilise pas "use strict" et "use warnings" ... c'était pour un test rapide

  2. #2
    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
    Quelque chose comme ça devrait convenir :

    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
    #!/usr/bin/env perl
    use strict; use warnings;
     
    open my($logfile), '<', 'info.log'
      or die "Can't open info.log : $!\n";
     
    my @titles_length;
     
    while( <$logfile> ) {
      push @titles_length, $1 if m/^ID_DVD_TITLE_\d+_LENGTH=([\d\.]+)/;
    }
     
    close $logfile;
     
    print "Nombre de titres sur le dvd : " . @titles_length . "\n";
    for my $idx (0..$#titles_length) {
      my $duration = s2hms($titles_length[$idx]);
      print "Le titre " . ($idx+1) 
        . " a une durée de : $duration.\n";
    }
     
    sub s2hms {
      my $seconds = shift;
      my $hours = int($seconds/3600);
      $seconds -= $hours * 3600;
      my $minutes = int($seconds/60);
      $seconds -= $minutes * 60;
      return sprintf '%02d:%02d:%02d', $hours, $minutes, $seconds;
    }
    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 41
    Points
    41
    Par défaut
    Et ben alors la !! Chapeau bas !!

    Un très grand merci à toi de me servir ca sur un plateau ... me reste plus qu'a comprendre ce que tu as fait

    En tout cas ca marche nickel

    Jjeje007

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2013, 14h39
  2. Comment créer des variables pour chaque ligne d'une table
    Par Slyvore dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 24/04/2012, 14h24
  3. comment récupérer le dernier argument de chaque ligne dans une liste?
    Par sth56 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/03/2011, 14h02
  4. Réponses: 0
    Dernier message: 09/11/2010, 15h42
  5. [PC] Comment incrémenter la ligne d'une variable ?
    Par SinXJon dans le forum Cobol
    Réponses: 4
    Dernier message: 15/02/2007, 18h51

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