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 :

Ouvir et compter dans un fichier


Sujet :

Langage Perl

  1. #1
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut Ouvir et compter dans un fichier
    Salut à tous, j'ai besoin de l'aide pour calculer certaines variables qui sont dans mon fichier.

    voici mon code:
    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
    sub ReadDsc() {
    #while (my ($k, $v)=each (%dscdir))
    #{
    #print "dsc: $v\n";}
     
    my ( $s_dir, $s_dsc, $s_project);
    my ( $s_var, $s_block, $s_id, $s_code, $s_label, $s_tp0,$s_video, $s_audio, $s_image,$s_anim) ;    # Pour chaque DSC
    my ($NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION) = (0,0,0,0,0,0,0);
     
    foreach $s_project ( keys %dscdir ) {
                    $s_dsc=$dscdir{$s_project}; #chemin complet du dsc
                    #print "$s_dsc\n"; #test
                    open (FHifile,"<$s_dsc" ) || &MyError( __LINE__, $!, "Can not open input file $s_dsc" );
                    while(defined( my $l = <FHifile> ) )
                    {
                       next if (/^\/\//);
                       chomp $l;
                       if(/^\s* NEWPAGE/) { $NP +=1;}
                       elsif (/^\s*STOP/) { $NSTOP +=1;}
                       elsif (/^\s*ASK/)  { $NQ +=1;}
                       elsif (/\@FLV/)    { $VIDEO +=1;}
                       elsif (/\@MP3/)    { $AUDIO +=1;}
                       elsif (/\@IMG/)    { $IMAGE +=1;}
                       elsif (/\@SWF/)    { $ANIMATION +=1;}
                    }
                    close (FHidir);
                    push my @dscinfo, $NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION;
                    ${$dscinfo{$s_project}} = [@dscinfo];
     
    }
     
    }
    je veux parcourir mon s_dsc ligne par ligne et passer a la ligne suivante si la courante commence par un //, compter le le nombre de ligne commençant par exemple par NEWPAGE, ASK,..., mettre toutes ces valeurs dans @dscinfo, et mettre @dscinfo dans %dscinfo (contient les @dscinfo de tous les s_dsc).
    Mais en executant le script j'ai ces erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Use of uninitialized value $_ in pattern match (m//) at script.pl 
    	<FHifile> line 619 (#4)
    merci pour votre coup de pousse.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Ton problème ne viendrais t-il pas de cette ligne ?
    Essaie avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    next if ($l =~/^\/\//);

  3. #3
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    j'ai fais ça:

    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
    sub ReadDsc() {
     
    my ($s_project ,$s_dsc, $s_var, $s_block, $s_id, $s_code, $s_label, $s_tp0);
    my ($NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION) = (0,0,0,0,0,0,0);
     
    foreach $s_project ( keys %dscdir ) {
                    my @dscinfo;
                    $s_dsc=$dscdir{$s_project}; #chemin complet du dsc
                    #print "$s_dsc\n"; #test
                    open (FHifile,"<$s_dsc" ) || &MyError ( __LINE__, $!, "Can not open input file $s_dsc" );
                    while( my $line = <FHifile>) # Pour ne charger tout le fichier en memoire
                    {
                       if ($line!~/^$/ and $line!~/^\/\//){
                       #next if ($line = ~/^\/\//); # ligne suivante si la ligne courane debute par des com
                       chomp ($line);
                               if(/^\s* NEWPAGE/) { $NP +=1;}
                               elsif (/^\s*STOP/) { $NSTOP +=1;}
                               elsif (/^\s*ASK/)  { $NQ +=1;}
                               elsif (/\@FLV/)    { $VIDEO +=1;}
                               elsif (/\@MP3/)    { $AUDIO +=1;}
                               elsif (/\@IMG/)    { $IMAGE +=1;}
                               elsif (/\@SWF/)    { $ANIMATION +=1;}
                    }
                    }
                    #close (FHidir);
                    push  @dscinfo, $NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION;
                    ${$dscinfo{$s_project}} = [@dscinfo];
     
    }
     
    }
    mais tjours rien!!

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                       chomp $l;
                       if (/^\/\//) { next;}
                       elsif(/^\s* NEWPAGE/) { $NP +=1;}
                       elsif (/^\s*STOP/) { $NSTOP +=1;}
                       elsif (/^\s*ASK/)  { $NQ +=1;}
                       elsif (/\@FLV/)    { $VIDEO +=1;}
                       elsif (/\@MP3/)    { $AUDIO +=1;}
                       elsif (/\@IMG/)    { $IMAGE +=1;}
                       elsif (/\@SWF/)    { $ANIMATION +=1;}
    ?

  5. #5
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    je fais ceci:

    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
    sub ReadDsc() {
     
    my (@dscinfo, $s_project, $s_dsc, $s_var, $s_block, $s_id, $s_code, $s_label, $s_tp0);
    my ($NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION) = (0,0,0,0,0,0,0);
     
    foreach $s_project ( keys %dscdir ) {
     
                    $s_dsc=$dscdir{$s_project}; #chemin complet du dsc
                    print "$s_dsc\n"; #test
                    open (FHifile,"<","$s_dsc") || &MyError ( __LINE__, $!, "Can not open input file $s_dsc" );
                    while( my $line = <FHifile>) # Pour ne charger tout le fichier en memoire
                    {
                            chomp $line;
                            if ($line=~/^\/\//) { next;}
                            elsif($line=~/^\s* NEWPAGE/) { $NP +=1;}
                            elsif ($line=~/^\s*STOP/) { $NSTOP +=1;}
                            elsif ($line=~/^\s*ASK/)  { $NQ +=1;}
                            elsif ($line=~/\@FLV/)    { $VIDEO +=1;}
                            elsif ($line=~/\@MP3/)    { $AUDIO +=1;}
                            elsif ($line=~/\@IMG/)    { $IMAGE +=1;}
                            elsif ($line=~/\@SWF/)    { $ANIMATION +=1;}
                    }
                    #close (FHidir);
                    push  @dscinfo, $NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION;
                    ${$dscinfo{$s_project}} = [@dscinfo];
     
    }
     
    }
    et mon erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Use of uninitialized value $s_dsc in concatenation (.) or string at count2.pl
    	line 124, <FHifile> line 621 (#1)
    je crois que l'erreur vient de l'instruction open, sachant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s_dsc =/home/arm3366/datadir/client/project/vvorchestra.dsc
    càd le chemin de mon fichier dsc

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Peux-tu poster tes lignes 124 et 621 ?

    Dans ton code, tu as réellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s_dsc =/home/arm3366/datadir/client/project/vvorchestra.dsc
    ou c'était juste pour donner la valeur ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Sinon pour ton instruction OPEN, essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FHifile,"<$s_dsc")

  8. #8
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    voila fonction complete

    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
    sub ReadDsc() {
     
    my (@dscinfo, $s_project, $s_dsc, $s_var, $s_block, $s_id, $s_code, $s_label, $s_tp0);
    my ($NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION) = (0,0,0,0,0,0,0);
     
    foreach $s_project ( keys %dscdir ) {
                    $s_dsc=$dscdir{$s_project}; #chemin complet du dsc
                    print "$s_dsc\n"; # affiche  /home/arm3366/datadir/client/project/vvorchestra.dsc pour le premier dsc
     
                    open (my $FHifile,"<$s_dsc") || &MyError ( __LINE__, $!, "Can not open input file $s_dsc" ); # ligne 125 de mon code
     
                    while( my $line = <$FHifile>) # Pour ne pas charger tout le fichier en memoire
                    {
                            chomp $line;
                            if ($line=~/^\/\// || $line =~ /^$/) { next;}
                            elsif($line=~/^\s* NEWPAGE/) { $NP +=1;}
                            elsif ($line=~/^\s*STOP/) { $NSTOP +=1;}
                            elsif ($line=~/^\s*ASK/)  { $NQ +=1;}
                            elsif ($line=~/\@FLV/)    { $VIDEO +=1;}
                            elsif ($line=~/\@MP3/)    { $AUDIO +=1;}
                            elsif ($line=~/\@IMG/)    { $IMAGE +=1;}
                            elsif ($line=~/\@SWF/)    { $ANIMATION +=1;}
                    }
                    #close ($FHidir);
                    push  @dscinfo, $NP, $NSTOP, $NQ, $VIDEO, $AUDIO, $IMAGE, $ANIMATION;
                    ${$dscinfo{$s_project}} = [@dscinfo];
     
    }
     
    }
    j'ai mis la sortie dans un fichier joint txt et j'ai indique en commentaire la ligne 125 de mon code .
    Fichiers attachés Fichiers attachés

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Pour faire un test, si tu mets en dur /home/arm3366/datadir/client/project/vvorchestra.dsc à la place de $s_dsc dans ton OPEN, ça fonctionne ?

  10. #10
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    En fait je fait une boucle sur %dscdir qui contient qui a pour clef project et pour valeur les, donc je ne peux mettre les referense en dur pour elements de %dscdir, sachant que j'ai une grande liste et j'ai mis en piece jointe un petit bout
    Fichiers attachés Fichiers attachés

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Un truc qui me semble bizarre c'est que ton MyError devrait afficher le nom du fichier que l'on essaie d'ouvrir. Or dans ton erreur.txt, il affiche arm3366@monpc:~/scriptdir$ ???

    sinon dans ta liste, il y a une valeur à undef. Ne devrais-tu pas ajouter un test avant d'essayer d'ouvrir ton fichier ?

  12. #12
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    c'est exact je l'ai revu hier soir et c'est le cas.
    Parceque dans ma liste de dsc il y a des undef et j'essai de remedier à cela.

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

Discussions similaires

  1. compter les occurences dans un fichier avec fgetc
    Par deathsurfer dans le forum C
    Réponses: 21
    Dernier message: 21/01/2007, 13h44
  2. [FAQ] compter les occurences d'une chaîne dans un fichier
    Par cafeine dans le forum Contribuez
    Réponses: 3
    Dernier message: 25/07/2006, 11h21
  3. [VBA-E]Compter nombre de fichier dans un dossier
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/05/2006, 14h36
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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