Base perl

flongo Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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