Problem en langage PERL

Fermé
pierrot75 - 5 août 2009 à 11:01
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 5 août 2009 à 11:41
Bonjour,
je vous met ci dessous un programme que j'ai ecrit en langage PERL
les permieres lignes marchent.
Comme je suis en stage en angleterre donc les commentaires que j'ai fait sont en anglais pas forcement tres bon.

#!/usr/bin/perl -w

open (OUT, ">test3.txt");

##open VCS file

open(FILE,"<essai1.vcs");

##initilization

$t=0;

##read the file and search the ligne begining by guid(reference of material)
##and mass(density mass of each material) and take it in a matrix

while ($lines=<FILE> and $t<43)
{
if ($lines=~" <GUID>")
{
if ($t>25)
{
$lineg=$lines;
$g=substr($lineg,12,36);
}
$t++
}
if ($lines=~" <Mass>")
{
$b=substr($lines,12,4);
my(@row) = ($a, $b);
push (@matrix , \@row);
}
}

foreach $n (@matrix)
{
foreach $k (@{$n})
{
print OUT "$k ";
}
print OUT "\n";
}


##first matrix column and line is number 0
##in the description we have $matrix[line][column]
##here we have in the column number 0 the reference GUID and the column 1 MASS witch is a densitymass
##for the first column of each line of the matrix we looking for the first line which begin by " <Material>"
##we just want to look at the first one and to compare it to $c

for ( $j=0; $j<15; $j++)
{
$i=0;

$c=$matrix[$j][0];

print OUT "$c\n";

while ($lines=<FILE>)
{
if ($lines=~" <Material>")
{
$i++
if ($i = 1)
{
$lined=$lines;
$d=substr($lined,22,36);
print OUT "$d\n";
if ($c = $d)
{
$densitymass=$d;
}
else
{
print OUT "b\n";
}
}
}
}
}

Voila le problem c'est qu'il ne compare rien et meme ne m'ecrit plus rien sur mon fichier de sorti donc voila le truc
Je vous remercie pour vos reponse rapide
A voir également:

5 réponses

jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
5 août 2009 à 11:10
En PERL d'après mes souvenirs (ca fait bien un an que j'en ai pas fait ^^)
les comparaisons c'est == ou eq, mais pas =

donc tous tes tests if ($i = 1) , if ($c = $d) , c'est pas des comparaisons mais des affectations
1
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
5 août 2009 à 11:13
Salut,

En PERL d'après mes souvenirs
Tes souvenirs sont bons ;-)
0
pierrot75 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
5 août 2009 à 11:33
alors lami20j
ce script dans sa premiere partie construit une matrice avec dans l;a premiere colonne une reference avec des caracteres alphanumeriques et dans la seconde colonne sa correspondance en terme de densite massique (entre nous c'est marque en anglais ce que fais chaque partie)
ensuit dans la seconde partie en fait je regarde dans le fichier d'entree <FILE>et demande de regarde la ligne commencant par <material>.Jusqu'ici mon programme fait ce que je veux (je ne veux que la premiere ligne qui correspond a ca).
Ensuite j'attribue a $lined la valeur des caractere alphanumerique.
Si elle est egale a celui que j'ai mis dans la valeur $c alors je l'ecrit dans le fichier OUT (bon en fait je veux mettre l'autre partie de la matrice lui correspondant mais ca je sais commment faire)
La je viens de changer le truc mais il bug et ne me fait pas de fichier de sortie ou je peu voir au moins ma matrice
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
5 août 2009 à 11:10
Salut,

Tu pourras aussi nous dire ce qu'il est censé faire ton script.
Coller comme ça un code et dire que ça ne marche pas n'est pas vraiment d'un grand aide.
Merci.
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
5 août 2009 à 11:15
:)
0
PS
Merci en tout cas pour la petite revision en fait je connais que le langage C++ et C mauis pas PERL mais je tente de me debrouiller
merci a vous deux
0

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

Posez votre question
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
5 août 2009 à 11:41
Re,

Ben, mets un espion print "\$c = $c et \$d = $d\n"; pour voir ce que ça donne.
0