[PERL] un if tout bête qui fonctionne pas !?
Résolu
sheol
Messages postés
6
Statut
Membre
-
sheol Messages postés 6 Statut Membre -
sheol Messages postés 6 Statut Membre -
Bonjour !
Venant du monde des scripts shell, j'ai fini par passer récemment sous PERL qui semble tellement plus adapté au boulot que je fais (extraction/construction de fichiers textes).
Sauf que là je comprends pas un truc. Mais vraiment pas. C'est vraiment bizarre. Auriez vous la réponse ?
Cf mon code en entier en fin de post.
Ce sont les dernières lignes qui ne fonctionnent pas, en l'occurrence celles-ci :
Au lieu de m'imprimer un truc du style :
ou selon la valeur de $attype
Il print un :
Merci déjà de m'avoir lu jusque là !!!
Le code en entier:
Venant du monde des scripts shell, j'ai fini par passer récemment sous PERL qui semble tellement plus adapté au boulot que je fais (extraction/construction de fichiers textes).
Sauf que là je comprends pas un truc. Mais vraiment pas. C'est vraiment bizarre. Auriez vous la réponse ?
Cf mon code en entier en fin de post.
Ce sont les dernières lignes qui ne fonctionnent pas, en l'occurrence celles-ci :
if ($ligne[$i] =~ /%block AtomicCoordinatesAndAtomicSpecies/) {
foreach $j (1..$NumberOfAtoms) {
($position) = ($ligne[$i+$j] =~ /( +.\d+.\d+ +.\d+.\d+ +.\d+.\d+) +[12]/);
($attype) = ($ligne[$i+$j] =~ / +([12])/);
if ($attype = 1) {
print $at1;
}
if ($attype = 2) {
print $at2;
}
print "\t$position\n";
}
}
Au lieu de m'imprimer un truc du style :
Fe 0.04 0.34 0.324
ou selon la valeur de $attype
Cr 0.04 0.34 0.324
Il print un :
FeCr 0.04 0.34 0.324
Merci déjà de m'avoir lu jusque là !!!
Le code en entier:
#!/usr/bin/perl
use warnings;
open(FDF,'mix.fdf');
@ligne=<FDF>; # chaque ligne du fichier source est assignee a une ligne dun @
foreach $i (0..@ligne) {
if ($ligne[$i] =~ /NumberOfAtoms/) {
($NumberOfAtoms) = ($ligne[$i] =~ /^NumberOfAtoms *([0-9]+)/);
}
if ($ligne[$i] =~ /NumberOfSpecies/) {
($NumberOfSpecies) = ($ligne[$i] =~ /^NumberOfSpecies *([0-9]+)/);
}
if ($ligne[$i] =~ /%block ChemicalSpeciesLabel/) {
($at1) = ($ligne[$i+1] =~ /1 +[0-9]+ +([A-Za-z]+)/);
($at2) = ($ligne[$i+2] =~ /2 +[0-9]+ +([A-Za-z]+)/);
print "$NumberOfAtoms\n$NumberOfAtoms atomes, de type $at2 et $at1\n";
}
if ($ligne[$i] =~ /%block AtomicCoordinatesAndAtomicSpecies/) {
foreach $j (1..$NumberOfAtoms) {
($position) = ($ligne[$i+$j] =~ /( +.\d+.\d+ +.\d+.\d+ +.\d+.\d+) +[12]/);
($attype) = ($ligne[$i+$j] =~ / +([12])/);
if ($attype = 1) {
print $at1;
}
if ($attype = 2) {
print $at2;
}
print "\t$position\n";
}
}
}
A voir également:
- [PERL] un if tout bête qui fonctionne pas !?
- Un pense-bête - Guide
- Pense bête windows - Accueil - Applications & Logiciels
- Télécharger pense-bête gratuit - Télécharger - Organisation
- Petite bete blanche ordinateur ✓ - Forum Matériel & Système
- Bête d'orage écran - Forum Matériel & Système
oui, c'est bien ça ;-)