[Perl ou PHP] Besoin d'un exemple tout bête
Fermé
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
-
27 mars 2006 à 09:56
nath - 23 janv. 2007 à 16:48
nath - 23 janv. 2007 à 16:48
A voir également:
- [Perl ou PHP] Besoin d'un exemple tout bête
- Url exemple - Guide
- Easy php - Télécharger - Divers Web & Internet
- Tableau word exemple - Guide
- Sommaire word exemple - Guide
- Pense bete - Guide
45 réponses
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
29 mars 2006 à 14:02
29 mars 2006 à 14:02
Re,
tu es sur quel OS?
@ARGV = qw (TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\fichier1.txt);
t'est sur pour ton chemin vers le fichier?
Le script est fait et tester sur Mandriva 2006 avec perl 5.8.6
PAr contre tu dis que le code marche ??? Tu pense que j'aurais donné quelque chose qui ne fonctionne pas? Ce n'est pas mon genre.
J'attends.Merci.
lami20j
tu es sur quel OS?
@ARGV = qw (TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\fichier1.txt);
t'est sur pour ton chemin vers le fichier?
Le script est fait et tester sur Mandriva 2006 avec perl 5.8.6
PAr contre tu dis que le code marche ??? Tu pense que j'aurais donné quelque chose qui ne fonctionne pas? Ce n'est pas mon genre.
J'attends.Merci.
lami20j
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:07
29 mars 2006 à 14:07
ok, voici le script.pl :
https://www.cjoint.com/?dDofkerLaC
Et le fichier1.txt toujours à la même adresse:
https://www.cjoint.com/?dCo0QJ4wvr
étape par étape, voici ce que je fais :
TRNG_MUNC::2> l
total 296
-rw-rw-rw- 1 mwesteel play 150176 Mar 24 17:01 fichier1.txt
-rwxrwxrwx 1 mwesteel play 954 Mar 29 14:01 script.pl
TRNG_MUNC::2> chmod +x script.pl
TRNG_MUNC::2> ./script.pl
Bareword "qr" not allowed while "strict subs" in use at ./script.pl line 6.
Bareword "b" not allowed while "strict subs" in use at ./script.pl line 6.
/[1-9]\.\d+e(/: unmatched () in regexp at ./script.pl line 6.
TRNG_MUNC::2>
https://www.cjoint.com/?dDofkerLaC
Et le fichier1.txt toujours à la même adresse:
https://www.cjoint.com/?dCo0QJ4wvr
étape par étape, voici ce que je fais :
TRNG_MUNC::2> l
total 296
-rw-rw-rw- 1 mwesteel play 150176 Mar 24 17:01 fichier1.txt
-rwxrwxrwx 1 mwesteel play 954 Mar 29 14:01 script.pl
TRNG_MUNC::2> chmod +x script.pl
TRNG_MUNC::2> ./script.pl
Bareword "qr" not allowed while "strict subs" in use at ./script.pl line 6.
Bareword "b" not allowed while "strict subs" in use at ./script.pl line 6.
/[1-9]\.\d+e(/: unmatched () in regexp at ./script.pl line 6.
TRNG_MUNC::2>
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
29 mars 2006 à 14:12
29 mars 2006 à 14:12
Je viens de voir une erreur
open FIC_W, ">>","$choix.txt" or die "Impossible de créer le fichier : $!\n";
mais plutôt :
open(FIC_W,">>choix.txt") || die "Impossible de créer le fichier : $!\n";
Donc j'utilise une variable $choix pas un nom simple choix
En fait c'est la variable qui fait la selection T1T3 ou T2R1
Essaie et dit le résultat.
open FIC_W, ">>","$choix.txt" or die "Impossible de créer le fichier : $!\n";
mais plutôt :
open(FIC_W,">>choix.txt") || die "Impossible de créer le fichier : $!\n";
Donc j'utilise une variable $choix pas un nom simple choix
En fait c'est la variable qui fait la selection T1T3 ou T2R1
Essaie et dit le résultat.
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:19
29 mars 2006 à 14:19
ben nan...toujours pareil en rajoutant le $ devant choix.txt, mêmes messages d'erreurs.
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
29 mars 2006 à 14:24
29 mars 2006 à 14:24
Essaie à la place de
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
ça
my $q = qr {\b-?[1-9]\.\d+e(?:\+|-)\d\d\b}i;
Si ça ne marche pas supprime use strict; et dit ce que ce passe.
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
ça
my $q = qr {\b-?[1-9]\.\d+e(?:\+|-)\d\d\b}i;
Si ça ne marche pas supprime use strict; et dit ce que ce passe.
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
29 mars 2006 à 14:30
29 mars 2006 à 14:30
Ca peut être à cause de ta version perl. Il faut installer une version plus récente de Perl.
Je vais t'expliquer ce soir ce que tu as mis en gras (msg N° 18).
On va arriver.
Je vais t'expliquer ce soir ce que tu as mis en gras (msg N° 18).
On va arriver.
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:32
29 mars 2006 à 14:32
ok, je vais essayer d'installer une version plus récente.
je cherche sur internet.
je cherche sur internet.
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:30
29 mars 2006 à 14:30
Ca marche toujours pas avec cette manip, mais c'est déjà mieux au niveau du message d'erreur.
TRNG_MUNC::2> ./script2.pl
/[1-9]\.\d+e(/: unmatched () in regexp at ./script2.pl line 5.
TRNG_MUNC::2> ./script2.pl
/[1-9]\.\d+e(/: unmatched () in regexp at ./script2.pl line 5.
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
29 mars 2006 à 14:32
29 mars 2006 à 14:32
Remplace
my $q = qr {\b-?[1-9]\.\d+e(?:\+|-)\d\d\b}i;avec
my $q = qr {\b-?[1-9]\.\d+e(\+|-)\d\d\b}i;
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:42
29 mars 2006 à 14:42
il me sort:
Search pattern not terminated at ./script2.pl line5.
Search pattern not terminated at ./script2.pl line5.
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
29 mars 2006 à 14:48
29 mars 2006 à 14:48
Affiche la ligne que tu as (je parle de regex)
En fait c'est l'implementation de regex, bien plus evoluer avec perl 5.8.6
En fait c'est l'implementation de regex, bien plus evoluer avec perl 5.8.6
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 14:50
29 mars 2006 à 14:50
je comprend pas ta question: ou est-ce que je trouve cette ligne ?
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
29 mars 2006 à 15:02
29 mars 2006 à 15:02
je parle de la ligne qui commence avec
my $q.....
je te propose de parler sur msn ou yahoo, donc de me laisse ton e-mail et on parlera ce soir. A toi de voir Miguel.
lami20j
my $q.....
je te propose de parler sur msn ou yahoo, donc de me laisse ton e-mail et on parlera ce soir. A toi de voir Miguel.
lami20j
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
29 mars 2006 à 15:06
29 mars 2006 à 15:06
ok ca marche,
moi c'est miguel_nord@hotmail.fr sous msn
je suis connecté toute la journée au boulot, et je me connecterai chez moi en rentrant.
merci !
moi c'est miguel_nord@hotmail.fr sous msn
je suis connecté toute la journée au boulot, et je me connecterai chez moi en rentrant.
merci !
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
29 mars 2006 à 15:58
29 mars 2006 à 15:58
Je serai à compter de 20h00.
A+
A+
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
29 mars 2006 à 20:28
29 mars 2006 à 20:28
Re,
J'ai fait une petite modification (j'ai enlévé la variable $q) - voir en gras
Voilà ce j'obtiens
J'ai fait une petite modification (j'ai enlévé la variable $q) - voir en gras
#! /usr/bin/perl # use warnings; use strict; @ARGV = qw (/home/lamitest/fifto_joint); my $e = 'o'; my (@elem,@fin); print "Choisissez T1T3 ou T2R1 : "; chomp(my $choix = <STDIN>); open FIC_W, ">>","/home/lamitest/$choix.txt" or die "Impossible de créer le fichier : $!\n"; while ( $e ne 'n'){ print "Entrez un point [ n pour quitter ]: "; chomp( $e = <STDIN>); push @elem,$e; } while (<>) { if (/\d{1,4}.*/ && /(-?[1-9]\.\d+e[+-]\d\d\s+){3,}/i){ if ($choix eq 'T1T3'){ s/(.*)/join " ",((split " ",$1)[0,2,4])/e; } elsif ($choix eq 'T2R1') { s/(.*)/join " ",((split " ",$1)[0,3,5])/e; } push @fin,$_; } } $choix =~ s/(\w\d)(\w\d)/$1 $2/; print FIC_W "$choix\n"; foreach my $ee (@elem) { foreach my $f(@fin){ print FIC_W substr($f,length($ee) + 1) if $f =~ /^$ee\s/; } }
Voilà ce j'obtiens
[lamitest@localhost my_perl_script]$ perl jointfifto2.pl Choisissez T1T3 ou T2R1 : T1T3 Entrez un point [ n pour quitter ]: 1 Entrez un point [ n pour quitter ]: 2 Entrez un point [ n pour quitter ]: 1002 Entrez un point [ n pour quitter ]: 1048 Entrez un point [ n pour quitter ]: 1050 Entrez un point [ n pour quitter ]: 1122 Entrez un point [ n pour quitter ]: 1253 Entrez un point [ n pour quitter ]: 1385 Entrez un point [ n pour quitter ]: 1103 Entrez un point [ n pour quitter ]: n [lamitest@localhost my_perl_script]$ cat ../../T1T3.txt T1 T3 1.599571E+01 -3.111541E+00 1.599571E+01 -3.111541E+00 -1.471738E-03 1.755156E-04 2.303846E+00 -1.913684E+00 2.303846E+00 -1.913684E+00 -2.394875E-04 6.770990E-05 2.128328E-04 2.143617E-02 2.128328E-04 2.143617E-02 -8.004485E-06 -7.672210E-04 1.263947E-01 3.976245E-01 5.355166E-04 2.345533E-02 5.898409E-03 -3.893692E-01 -4.951556E-05 -1.195602E-02 4.603311E-04 -3.379753E-02 -1.144123E-05 1.232031E-04 1.898172E+00 -4.020074E-01 -6.831452E-04 2.456513E-02 1.744331E+00 -1.281345E+00 4.934379E-04 -2.565404E-02 -3.029541E-05 -8.235135E-03 -1.234980E-08 4.537609E-06 [lamitest@localhost my_perl_script]$
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
30 mars 2006 à 09:28
30 mars 2006 à 09:28
c'est bon Lami, ca marche !
alors encore merci !
alors encore merci !
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
30 mars 2006 à 09:44
30 mars 2006 à 09:44
Salut,
de rien.
documentation fr http://perl.mines-albi.fr/DocFr.html
Si tu veut te mettre sérieusement sur Perl alors ce livre vaut son prix https://www.oreilly.fr
lami20j
de rien.
documentation fr http://perl.mines-albi.fr/DocFr.html
Si tu veut te mettre sérieusement sur Perl alors ce livre vaut son prix https://www.oreilly.fr
lami20j
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
>
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 avril 2006 à 15:56
3 avril 2006 à 15:56
salut Lami,
J'ai un autre petit problème, et une question précise à la fin de ce message.
en fait, maintenant je dois lire deux fichiers pour en extraire les valeurs.
dans le fichier 1 (le fichier Touareg2.txt https://www.cjoint.com/?edpOZdKdKD), j'obtiens les valeurs de T2 (ou T1 ou T3 ou R1 etc...suivant ce que l'utilisateur demande) pour les noeuds selectionnés, et dans le second fichier (Touareg_bulk.bdf https://www.cjoint.com/?edpJBuEfLl) je vais lire les coordonnées X Y Z des mêmes noeuds selectionnés.
Et en sortie, c'est à dire dans le troisième fichier, je dois obtenir dans la première colonne les abcsisses X (ou ordonnées Y ou les Z) des noeuds et dans la seconde les valeurs de T2 (ou T1 ou T3 ou R1 etc...).
Il y a une condition en plus, c'est que je demande à l'utilisateur si il veut faire ca avec Subcase 1, subcase 2 ou subcase 3. (en haut à droite de chaque tableau de valeurs dans le fichier Touareg2.txt)
Car suivant la valeur de subcase, les valeurs changent.
C'est à dire que si l'utilisateur choisit la subcase 2, qu'il selectionne les noeuds 1 2 et 1002 et qu'il demande X et T2 en sortie, je dois obtenir ce fichier en sortie:
fichier3.txt:
X T2
1736.66 -2.668348E-01
1714.0 -1.761392E-01
1695.704 -1.013814E-05
Donc voilà, je me lance dans ce nouveau script, mais j'ai une première question:
les @ARGV, les while (<>) et les $_ font référence au fichier ouvert, donc il faut que je ferme le premier fichier et que j'ouvre le second pour tapper mes commandes ?
C'est à dire que mon script perl doit contenir quelque chose du style:
@ARGV = qw (Touareg2.txt);
---commandes---
while (<>) { commandes avec $_ }
close @ARGV <-- évidemment, je connais pas la syntaxe...
@ARGV = qw (Touareg_bulk.bdf);
---commandes---
while (<>) { commandes avec $_ }
Si je fais ca, @ARGV sera remplacé ? et <> et $_ feront référence au second fichier à partir de @ARGV = qw (Touareg_bulk.bdf); ?
merci.
Miguel
J'ai un autre petit problème, et une question précise à la fin de ce message.
en fait, maintenant je dois lire deux fichiers pour en extraire les valeurs.
dans le fichier 1 (le fichier Touareg2.txt https://www.cjoint.com/?edpOZdKdKD), j'obtiens les valeurs de T2 (ou T1 ou T3 ou R1 etc...suivant ce que l'utilisateur demande) pour les noeuds selectionnés, et dans le second fichier (Touareg_bulk.bdf https://www.cjoint.com/?edpJBuEfLl) je vais lire les coordonnées X Y Z des mêmes noeuds selectionnés.
Et en sortie, c'est à dire dans le troisième fichier, je dois obtenir dans la première colonne les abcsisses X (ou ordonnées Y ou les Z) des noeuds et dans la seconde les valeurs de T2 (ou T1 ou T3 ou R1 etc...).
Il y a une condition en plus, c'est que je demande à l'utilisateur si il veut faire ca avec Subcase 1, subcase 2 ou subcase 3. (en haut à droite de chaque tableau de valeurs dans le fichier Touareg2.txt)
Car suivant la valeur de subcase, les valeurs changent.
C'est à dire que si l'utilisateur choisit la subcase 2, qu'il selectionne les noeuds 1 2 et 1002 et qu'il demande X et T2 en sortie, je dois obtenir ce fichier en sortie:
fichier3.txt:
X T2
1736.66 -2.668348E-01
1714.0 -1.761392E-01
1695.704 -1.013814E-05
Donc voilà, je me lance dans ce nouveau script, mais j'ai une première question:
les @ARGV, les while (<>) et les $_ font référence au fichier ouvert, donc il faut que je ferme le premier fichier et que j'ouvre le second pour tapper mes commandes ?
C'est à dire que mon script perl doit contenir quelque chose du style:
@ARGV = qw (Touareg2.txt);
---commandes---
while (<>) { commandes avec $_ }
close @ARGV <-- évidemment, je connais pas la syntaxe...
@ARGV = qw (Touareg_bulk.bdf);
---commandes---
while (<>) { commandes avec $_ }
Si je fais ca, @ARGV sera remplacé ? et <> et $_ feront référence au second fichier à partir de @ARGV = qw (Touareg_bulk.bdf); ?
merci.
Miguel
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
30 mars 2006 à 09:53
30 mars 2006 à 09:53
par contre, tu sais comment je peux controler l'ouverture du fichier texte avec nedit depuis le programme perl ?
c'est à dire que à la place de tapper sous Unix
> nedit T1T3.txt
le programme perl le fait à ma place.
c'est à dire que à la place de tapper sous Unix
> nedit T1T3.txt
le programme perl le fait à ma place.
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
30 mars 2006 à 11:42
30 mars 2006 à 11:42
c'Est bon, je viens de trouver:
system ("nedit fichier.txt");
ciao !
system ("nedit fichier.txt");
ciao !
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
3 avril 2006 à 16:31
3 avril 2006 à 16:31
petite précision concernant ma question https://forums.commentcamarche.net/forum/affich-2165042-perl-ou-php-besoin-d-un-exemple-tout-bete#44
En fait, au niveau des coordonnées X Y et Z d'un noeud dans le deuxieme fichier (Touareg_bulk.bdf), ca s'arrete à 8 caractères.
En effet, les coordonnées ne sont pas forcément séparées d'un espace. quand c'Est le cas, par exemple ici pour le noeud 1000:
GRID 1000 1704.41256.84644501.25
ca veut dire que X=1704.412
Y = 56.84644
Z = 501.25
c'est à dire 8 caractères pour chaque coordonnée.
Maintenant, je sais coder, grâce à Lami, la reconnaissance de 1704.412 mais comment dire que la regex se limite à 8 caractères ?
merci.
En fait, au niveau des coordonnées X Y et Z d'un noeud dans le deuxieme fichier (Touareg_bulk.bdf), ca s'arrete à 8 caractères.
En effet, les coordonnées ne sont pas forcément séparées d'un espace. quand c'Est le cas, par exemple ici pour le noeud 1000:
GRID 1000 1704.41256.84644501.25
ca veut dire que X=1704.412
Y = 56.84644
Z = 501.25
c'est à dire 8 caractères pour chaque coordonnée.
Maintenant, je sais coder, grâce à Lami, la reconnaissance de 1704.412 mais comment dire que la regex se limite à 8 caractères ?
merci.
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
3 avril 2006 à 17:15
3 avril 2006 à 17:15
Salut,
Pour obliger une regex de prendre en compte seulement 8 caractères on peut utiliser le quantificateur {n} ou n c'est le nombre fix dès caractères à reconnaître.
Donc en fait pour un traitement de ce genre c'est très important de connaître ce que le fichier contient.
Et ça je ne savais pas quand j'ai écrit le script.
On vera ce soir.
En ce qui concerne @ARGV attention.
On utilise close pour fermer un handle de fichier mais pas le tableau prédefinie @ARGV qui contient les noms des fichiers qu'on passe en argument.
En revanche on peut utiliser les éléments du tableau
$ARGV[0]
$ARGV[1]
@ARGV = qw (Touareg2.txt,Touareg_bulk.bdf);
en ce cas on a
$ARGV[0] contient "Touareg2.txt"
$ARGV[1] contient "Touareg_bulk.bdf"
Pour obliger une regex de prendre en compte seulement 8 caractères on peut utiliser le quantificateur {n} ou n c'est le nombre fix dès caractères à reconnaître.
Donc en fait pour un traitement de ce genre c'est très important de connaître ce que le fichier contient.
Et ça je ne savais pas quand j'ai écrit le script.
On vera ce soir.
En ce qui concerne @ARGV attention.
On utilise close pour fermer un handle de fichier mais pas le tableau prédefinie @ARGV qui contient les noms des fichiers qu'on passe en argument.
En revanche on peut utiliser les éléments du tableau
$ARGV[0]
$ARGV[1]
@ARGV = qw (Touareg2.txt,Touareg_bulk.bdf);
en ce cas on a
$ARGV[0] contient "Touareg2.txt"
$ARGV[1] contient "Touareg_bulk.bdf"
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
3 avril 2006 à 17:27
3 avril 2006 à 17:27
Re,
les @ARGV, les while (<>) et les $_ font référence au fichier ouvert, donc il faut que je ferme le premier fichier et que j'ouvre le second pour tapper mes commandes ?
l'opérateur diamant <> lit depuis @ARGV s'il est défini sinon depuis STDIN
$_ c'est la varable prédéfini de Perl qui contient une ligne de fichier à traité à la fois
Si je fais ca, @ARGV sera remplacé ? et <> et $_ feront référence au second fichier à partir de @ARGV = qw (Touareg_bulk.bdf); ?
Donc $_ c'est la une variable qui ne contient en aucun cas le nom de fichier.
Si tu veux voilà une traduction
Tant que <lire les fichier que tu as en @ARGV ou STDIN> {
traitement de chaque ligne
}
$_ c'est chaque ligne
les @ARGV, les while (<>) et les $_ font référence au fichier ouvert, donc il faut que je ferme le premier fichier et que j'ouvre le second pour tapper mes commandes ?
l'opérateur diamant <> lit depuis @ARGV s'il est défini sinon depuis STDIN
$_ c'est la varable prédéfini de Perl qui contient une ligne de fichier à traité à la fois
Si je fais ca, @ARGV sera remplacé ? et <> et $_ feront référence au second fichier à partir de @ARGV = qw (Touareg_bulk.bdf); ?
Donc $_ c'est la une variable qui ne contient en aucun cas le nom de fichier.
Si tu veux voilà une traduction
Tant que <lire les fichier que tu as en @ARGV ou STDIN> {
traitement de chaque ligne
}
$_ c'est chaque ligne
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
3 avril 2006 à 19:33
3 avril 2006 à 19:33
Re,
bon, je viens de comprendre ce que tu veux.
Une fois que j'ai fini le script je te ferai signe.
Vu que tu dois utiliser en tant que condition Subcase je te conseilles d'avoir un peu de patience avant de te trop casser la tête.
Une fois le script fini je te donnerai les explication nécessaires.
Et comme je vois que le fil devient longue, je vais écrire un message dans lequel je vais réexpliquer les scripts comme je l'ai déjà fait avec toi par msn.
Ca pourra aider. On ne sais jamais. Au moins on doit ça à CCM.
Grâce au CCM on apprend et on trouve des solutions. Enfin c'est mon avis.
lami20j
bon, je viens de comprendre ce que tu veux.
Une fois que j'ai fini le script je te ferai signe.
Vu que tu dois utiliser en tant que condition Subcase je te conseilles d'avoir un peu de patience avant de te trop casser la tête.
Une fois le script fini je te donnerai les explication nécessaires.
Et comme je vois que le fil devient longue, je vais écrire un message dans lequel je vais réexpliquer les scripts comme je l'ai déjà fait avec toi par msn.
Ca pourra aider. On ne sais jamais. Au moins on doit ça à CCM.
Grâce au CCM on apprend et on trouve des solutions. Enfin c'est mon avis.
lami20j
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
6 avril 2006 à 01:04
6 avril 2006 à 01:04
Salut,
Ce script ne traite que les fichiers que tu donnes comme exemple. Si jamais la structure de tes fichiers change c'est quand même dommage (je ne peux pas garantir le fonctionnement de script pour n'importe quel fichier). Quand on fait des traitements comme ça c'est bien de savoir ce que les fichiers contient.
Bien sûr le script peut être modifié en fonction de tes besoin.
En bref :
- j'ai traité les 2 fichiers en faisant l'extraction des donées que j'ai eu besoin
- j'ai utilisé des hachage, hachages de tableaux, en bref des structure complexe ( en Perl )
- j'ai permis la saisie insensible à la casse
- le résultat est sauvegarder dans un fichier touareg_resultat
- à toi de voir
Pour la question du msg N° 44
C'est à dire que si l'utilisateur choisit la subcase 2, qu'il selectionne les noeuds 1 2 et 1002 et qu'il demande X et T2 en sortie, je dois obtenir ce fichier en sortie:
fichier3.txt:
X T2
1736.66 -2.668348E-01
1714.0 -1.761392E-01
1695.704 -1.013814E-05
Ce script ne traite que les fichiers que tu donnes comme exemple. Si jamais la structure de tes fichiers change c'est quand même dommage (je ne peux pas garantir le fonctionnement de script pour n'importe quel fichier). Quand on fait des traitements comme ça c'est bien de savoir ce que les fichiers contient.
Bien sûr le script peut être modifié en fonction de tes besoin.
En bref :
- j'ai traité les 2 fichiers en faisant l'extraction des donées que j'ai eu besoin
- j'ai utilisé des hachage, hachages de tableaux, en bref des structure complexe ( en Perl )
- j'ai permis la saisie insensible à la casse
- le résultat est sauvegarder dans un fichier touareg_resultat
- à toi de voir
Pour la question du msg N° 44
C'est à dire que si l'utilisateur choisit la subcase 2, qu'il selectionne les noeuds 1 2 et 1002 et qu'il demande X et T2 en sortie, je dois obtenir ce fichier en sortie:
fichier3.txt:
X T2
1736.66 -2.668348E-01
1714.0 -1.761392E-01
1695.704 -1.013814E-05
#! /usr/bin/perl use warnings; use strict; open TTXT, "Touareg2.txt" or die "E/S : $!\n"; open BULK, "Touareg_bulk.bdf" or die "E/S : $!\n"; open WRES, ">tuareg_resultat" or die "E/S : $!\n"; my (@tr_val,@t,@subcase); my (%h,%g); my @grid; my %bulk; my %coord; my $xyz_val; my $tr = 'o'; ####################################### # TRAITEMENT DU FICHIER TUAREG2.TXT # ####################################### # #enlevement de toutes les lignes inutiles #on garde seulement les lignes qui contient SUBCASE #(on met SUBCASE au debut de ligne) #et le lignes avec les valeurs #1 G 1.599571E+01 1.185148E-02 -3.111541E+00 1.784951E-06 5.286219E-02 -3.340712E-06 while (<TTXT>) { next if /^(\s|\t)*\n$/; s/.*(subcase)\s*(\d+).*\n$/;$1$2:/i; next if /^(\d|\s+[a-z].*|\s+\()/i; s/^\s*//g; s/\n$/!/; push @t,$_; } ############################################ # TRAITEMENT DU FICHIER Touareg_bulk.bdf # ############################################ #on traite seulement les lignes qui commence avec GRID #on supprime GRID et les espaces au début while (<BULK>){ next unless /^GRID/; s/^GRID\s*//; s/\s+$//; push @grid,$_; } ############################# # SAISIE DES COLONNES # ############################# print "Entrez la colonne [T1,T2,T3,R1,R2,R3] : "; chomp(my $col = <STDIN>); (my $col_index = $col) =~ s/^.(.)/$1/; if ($col =~ /^t/i) { $col_index += 1; } else { $col_index += 4; } ##################################################### # TRAITEMENT DES LIGNES Touareg2.txt SAUVEGARDÉES # ##################################################### my $t = join "",@t; $t =~ s/\s+/|/g; my @tt = split /;/,$t; foreach (@tt){ my ($cle,$val) = split /:/,$_; if (defined($val)){ $val =~ s/\|/ /g; my @res_val = split /!/, $val; $h{$cle} = [ @res_val ]; } } ############################# # SAISIE DES SUBCASES # ############################# @subcase = keys %h; print "Vous avez ", $#subcase+1," subcase. Entrez le subcas : "; chomp (my $cas = <STDIN>); $cas = 'SUBCASE'.$cas; foreach (keys %h){ foreach my $el( @{$h{$_}} ){ push @{$g{$_}},[ split /\s/,$el]; } } ################################################## # AFFICHAGE DES POINTS EXISTANTS PAR SUBCASE # ################################################## foreach (sort keys %g) { print "$_ : "; foreach my $l( @{$g{$_}} ){ print "$l->[0],"; } print "\n"; } ########################################### # SAISIE DES POINTS # ########################################### while ($tr ne 'n'){ print "Entrez une valeur du point [ n ] pour quitter : "; chomp($tr = <STDIN>); push @tr_val,$tr; } ########################################### # TRAITEMENT DES DONNEES X,Y ET Z # ########################################### #à tenir compte qu'il y a des valeurs qui commence avec - foreach (@grid){ my ($c,$v) = split /\s+/,$_,2; $bulk{$c} = $v; } foreach(sort keys %bulk){ my($i,$j,$k); if (substr($bulk{$_},8,1) eq '-' # si - or substr($bulk{$_},8,1) eq '+'){# ou + $i = substr($bulk{$_},0,7); $j = substr($bulk{$_},8,9); $k = substr($bulk{$_},16); push @{$coord{$_}},($i,$j,$k); } else { $i = substr($bulk{$_},0,8); $j = substr($bulk{$_},8,8); $k = substr($bulk{$_},16); push @{$coord{$_}},($i,$j,$k); } } print "Choissisez X,Y ou Z : "; chomp (my $abs = <STDIN>); SWITCH: { $abs =~ /x/i && do{$xyz_val = 0;last SWITCH}; $abs =~ /y/i && do{$xyz_val = 1;last SWITCH}; $abs =~ /z/i && do{$xyz_val = 2;last SWITCH}; } ############################################## # ECRITURE DU RESULTAT DANS LE HANDLE WRES # # (voir au début du script) # ############################################## print WRES "\U$abs $col\n"; foreach my $tel( @{$g{$cas}} ) { foreach my $xyz ( keys %coord ) { foreach (@tr_val){ if ($tel->[0] eq $_ and $xyz eq $_){ print WRES "$coord{$_}[$xyz_val] $tel->[$col_index]\n"; } } } }Le résultat
[lamitest@localhost bin]$ perl tuareg.pl Entrez la colonne [T1,T2,T3,R1,R2,R3] : t2 Vous avez 3 subcase. Entrez le subcas : 2 SUBCASE1 : 1,2,1000,1001,1002,1003, SUBCASE2 : 1,2,1000,1001,1002,1003, SUBCASE3 : 1,2,1000,1001,1002,1003, Entrez une valeur du point [ n ] pour quitter : 1 Entrez une valeur du point [ n ] pour quitter : 2 Entrez une valeur du point [ n ] pour quitter : 1002 Entrez une valeur du point [ n ] pour quitter : n Choissisez X,Y ou Z : x [lamitest@localhost bin]$ cat tuareg_resultat X T2 1736.66 -2.668348E-01 1714.0 -1.761392E-01 1695.704 -1.013814E-05 [lamitest@localhost bin]$
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
6 avril 2006 à 08:13
6 avril 2006 à 08:13
merci Lami, je vais essayer ca au boulot !
fifto
Messages postés
54
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
15 juin 2006
6 avril 2006 à 10:11
6 avril 2006 à 10:11
je suis en train d'étudier ton code...
Afin de pouvoir l'adapter à d'autres fichiers plus tard.
J'ai une question :
Que veulent dire les next if ci-dessous s'il te plait ?
while (<TTXT>) { # j'ai compris cette ligne
next if /^(\s|\t)*\n$/;
s/.*(subcase)\s*(\d+).*\n$/;$1$2:/i; # j'ai compris cette ligne
next if /^(\d|\s+[a-z].*|\s+\()/i;
s/^\s*//g; # j'ai compris cette ligne
s/\n$/!/; # j'ai compris cette ligne
push @t,$_; # j'ai compris cette ligne
}
Afin de pouvoir l'adapter à d'autres fichiers plus tard.
J'ai une question :
Que veulent dire les next if ci-dessous s'il te plait ?
while (<TTXT>) { # j'ai compris cette ligne
next if /^(\s|\t)*\n$/;
s/.*(subcase)\s*(\d+).*\n$/;$1$2:/i; # j'ai compris cette ligne
next if /^(\d|\s+[a-z].*|\s+\()/i;
s/^\s*//g; # j'ai compris cette ligne
s/\n$/!/; # j'ai compris cette ligne
push @t,$_; # j'ai compris cette ligne
}
29 mars 2006 à 14:16
tu parles de la version de perl ?
c'Est la version 5.004_04 built for irix-n32
plus précisement, il me sort ca à la commande perl -v sous Unix:
TRNG_MUNC::2> perl -v
This is perl, version 5.004_04 built for irix-n32
Copyright 1987-1997, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
[1] + Done /usr/bin/nedit_V5
29 mars 2006 à 14:16
tu parles de la version de perl ?
c'Est la version 5.004_04 built for irix-n32
plus précisement, il me sort ca à la commande perl -v sous Unix:
TRNG_MUNC::2> perl -v
This is perl, version 5.004_04 built for irix-n32
Copyright 1987-1997, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
[1] + Done /usr/bin/nedit_V5