Problem en langage PERL [Fermé]

Signaler
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
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

5 réponses

Messages postés
816
Date d'inscription
samedi 21 juin 2008
Statut
Membre
Dernière intervention
17 juillet 2012
183
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Salut,

En PERL d'après mes souvenirs
Tes souvenirs sont bons ;-)
>
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019

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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
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.
Messages postés
816
Date d'inscription
samedi 21 juin 2008
Statut
Membre
Dernière intervention
17 juillet 2012
183
:)
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Re,

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