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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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
    Membre confirmé
    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
    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
    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
    Membre confirmé
    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
    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
    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
    Membre confirmé
    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
    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 ?

+ 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