Base perl

Fermé
flongo Messages postés 53 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 décembre 2009 - 21 avril 2009 à 15:09
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 21 avril 2009 à 17:42
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

6 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 avril 2009 à 15:24
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.
0
flongo Messages postés 53 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 décembre 2009
21 avril 2009 à 15:31
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 avril 2009 à 15:35
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.
0
flongo Messages postés 53 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 décembre 2009
21 avril 2009 à 15:42
Non ce sont toutes les lignes qui m'interessent mais je dois verifier qu'elles existent bien dans mon txt.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 avril 2009 à 15:46
Re,

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flongo Messages postés 53 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 décembre 2009
21 avril 2009 à 15:55
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 avril 2009 à 17:42
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

0