Base perl

Bonjour,

J'essaye a partir d'un fichier txt de recupérer des valeurs. Voila ce que j'ai fait :

open FICHIER, "<P:\\Perl\\Message\\test_mess.txt" or die "Ce fichier n'existe pas!";
@fic=<FICHIER>;#je met mon fichier dans un tableau
#print @fic;

for ($i=0;$i<=$#fic;$i++) #je parcours ce tableau
{
$ligne=@fic[$i]; # j'attribue a ligne l'element i du tableau fic
if ($ligne eq 'ad')
{
@tab=split(',',$ligne); #je crée un autre tableau tab qui contient une donnée avant la virgule et une apres
$ident_mess=$tab[$#tab]; # la variable ident_mess contient le dernier elts de tab a savoir la donnée #apres la virgule
}
}
print "l'\identifiant message est : $ident_mess" ; # Cette ligne ne fonctionne pas!

Je veux afficher la valeur de la variable ident_mess.
Quelqu'un peut il me decoincer svp?
Merci d'avance.
Cdlt
Configuration: Windows XP
Internet Explorer 7.0

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    Ton code n'as pas de sens.

    Si $ligne content que 'ad' alors tu splites quoi?

    Pour l'erreur de print, pas de backslash avant i
    print "l'identifiant message est : $ident_mess" ;


    Et puis, charger le fichier dans un tableau ou $ligne=@fic[$i]; # j'attribue a ligne l'element i du tableau fic , c'est un peu tordu, non?

    open FICHIER, "<P:\\Perl\\Message\\test_mess.txt" or die "Ce fichier n'existe pas!"; 
    
    while(<FICHIER>){
    	next unless /^ad$/;
    	my @tab=split /,/,$_; # mais il n'y a pas de séparateur pour split
    	print "l'identifiant message est .....\n";
    }
    Donne plutôt un morceau de ton fichier et dit ce que tu veux obtenir.
    1. En faite j'ai un fichier txt qui est composé de 2 lettres, une virgule apres et une valeurs derriere la virgule. Par exemple:

      aa
      ab,00000
      ac,jfsklmgksj
      ad,dfmjgsm

      Ce qui est apres la virgule je dois le mettre dans un BDD.
      Mais la particularité c'est que je dois verifier que les deux lettres existent bien dans mon fichier txt.
      Il y a certaine lettre qui n'ont pas de virgule ni de valeur.Ce sont des points de repere en faite.

      Voila ce que je veux faire!
      Merci pour ton aide.
      CDLT
      1. Modérateur
        Re,

        Si j'ai bien compris selon ton 1er et 2ème message, en fait ce ne sont que les lignes qui commencent avec ad qui t'interessent.

        ad,dfmjgsm

        Plus exact la valeur en gras.
        1. Non ce sont toutes les lignes qui m'interessent mais je dois verifier qu'elles existent bien dans mon txt.
      2. Modérateur
        Re,

        Alors il faut que tu me donnes un exemple de ce que tu veux obtenir comme sortie, puisque je n'ai pas compris.
        1. OK!

          Je veux une BDD avec comme vars les différentes lettres.
          Les deux lettres sont les variables et les valeurs sont qui se trouvent apres la virgule sont les données.

          Donc par exemple on a ce fichier :
          aa
          ab,00000
          ac,jfsklmgksj
          ad,dfmjgsm

          La BDD que je veux obtenir est la suivante:

          aa | ab | ac |ad
          --------------------------------------
          - |00000 | jfsklmgksj |dfmjgsm

          Si c'est pas trop claire fais moi signe.
          Merci.
          cdlt
          1. Modérateur
            Re,

            Voici un exemple d'affichage
            lami20j@debian:~/trash/ccm_perl$ cat ccm_bdd.pl
            #!/usr/bin/perl
            use strict;use warnings;
            my(@premier,@deuxieme);
            
            while(<DATA>){
                    next if /^$/;
                    if (/^(\w){2},(.*)/){
                      push @premier,$1;
                      push @deuxieme,$2;
                    }else{
                      push @premier,$_;
                      push @deuxieme,"-";
                    }
            }
            chomp(@premier);
            printf "%-10s|",$_ for @premier;
            print "\n";
            printf "%-10s|",$_ for @deuxieme;
            print "\n";
            __END__
            aa
            ab,00000
            ac,jfsklmgksj
            ad,dfmjgsm
            
            lami20j@debian:~/trash/ccm_perl$ perl ccm_bdd.pl
            aa        |b         |c         |d         |
            -         |00000     |jfsklmgksj|dfmjgsm   |
            

            Toutefois, l'insertion dans la base pourra se faire directement dans la boucle sans avoir besoin des tableaux.
            Quelque chose de ce genre.
            A savoir qu'au lieu de <DATA> tu utiliseras <FICHIER>
            #!/usr/bin/perl
            use strict;use warnings;
            my(@premier,@deuxieme);
            
            while(<DATA>){
                    next if /^$/;
                    if (/^(\w){2},(.*)/){
                      #ici insertion dans BDD de $1 (1ère valeur)
                      #ici insertion dans BDD de $2 (deuxième valeur)
                    }else{ # valeur de contrôle
                      #insertin dans la base de la valeur de contrôle
                      #insertion dans la base de tiret (-)
                    }
            }
            __END__
            aa
            ab,00000
            ac,jfsklmgksj
            ad,dfmjgsm