[PERL] un if tout bête qui fonctionne pas !?
Résolu
sheol
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
sheol Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
sheol Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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
- Bête d'orage écran - Forum MacOS
- The realtek network controller was not found. if deep sleep mode is enabled please plug the cable ✓ - Forum Pilotes (drivers)
oui, c'est bien ça ;-)