[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
Bonjour,

J'aimerais un renseignement s'il vous plait:

Il faut que j'ecrive un petit script (ou programme) sous unix et je
n'ai encore jamais fait ca..

ce que j'ai a faire, c'est ca: creer un graphique de type XY (abcisse-ordonnee) a partir de donnees d'un fichier texte et afficher ce graphique dans netscape (netscape navigator version 4.78).
Et tout ca dans une procedure automatique.

On m'a dit que les languages php et perl étaient adaptés à mon cas. Dans ce cas, quel est la plus facile: php ou perl ?

Mais concretement, quand je suis sous unix, qu'est ce que je dois faire pour lancer un programme (perl ou php) ? Je l'écris dans un fichier texte ou un fichier executable ? Quelle extension je dois donner à ce fichier dans ce cas? Et comment je l'execute ? Vous auriez pas un exemple tout con, genre juste l'affichage d'un message ou la somme 2+2=4 pour que je puisse voir comment procéder pour executer un tel programme ?


PS: voici un exemple de fichier texte dans lequel sont contenues mes donnees:

POINT ID. TYPE T1 T2 T3 R1 R2 R3
1 G 1.599571E+01 1.185148E-02 -3.111541E+00 1.784951E-06 5.286219E-02 -3.340712E-06
2 G 2.303846E+00 1.238950E-02 -1.913684E+00 1.784951E-06 5.286219E-02 -3.340712E-06
1000 G 1.009300E-03 -1.461770E-03 -8.895236E-02 -1.380486E-02 1.121588E-03 0.0
1001 G 6.655139E-04 -1.269913E-03 -1.202470E-02 -8.149052E-03 1.912397E-03 0.0
1002 G 2.128328E-04 -4.430452E-04 2.143617E-02 9.356764E-04 -1.131274E-03 0.0
1003 G 1.528846E-04 -3.164306E-04 1.279018E-02 1.256070E-03 -7.879398E-04 0.0
1004 G 4.770843E-04 -1.147985E-03 2.830649E-02 -3.521185E-03 -6.181516E-04 0.0
1005 G 2.695279E-04 -3.397622E-04 -1.185465E-02 -1.379297E-04 -1.666789E-03 0.0
1006 G 5.318802E-03 -1.288805E-02 1.703259E-01 3.963486E-02 2.937418E-02 0.0
1007 G 3.142439E-03 -5.341556E-03 5.803642E-02 1.815232E-02 1.094855E-02 0.0
1008 G 1.822350E-04 3.866597E-04 1.790608E-02 -1.606418E-03 -7.047455E-04 0.0


Et donc, par exemple, j'aimerai faire le graphique suivant contenant 3 points:
les points 1002, 1005 et 1006
leur abcisses respectives se trouvent dans la colonne T1, leurs ordonnees dans la colonne T3.
Et afficher ce graphique (avec legende, titre etc...) dans netscape..

merci.
Miguel
A voir également:

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
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
0
fifto Messages postés 54 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 15 juin 2006
29 mars 2006 à 14:16
Pour le chemin de fichier j'en suis sûr. Par contre je le rajoute pas dans le code car je travaille dans le même dossier.

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
0
fifto Messages postés 54 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 15 juin 2006
29 mars 2006 à 14:16
Pour le chemin de fichier j'en suis sûr. Par contre je le rajoute pas dans le code car je travaille dans le même dossier.

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
0
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
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>
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
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.
0
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
ben nan...toujours pareil en rajoutant le $ devant choix.txt, mêmes messages d'erreurs.
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
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.
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
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.
0
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
ok, je vais essayer d'installer une version plus récente.
je cherche sur internet.
0
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
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.
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
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; 
0
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
il me sort:

Search pattern not terminated at ./script2.pl line5.
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
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
0
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
je comprend pas ta question: ou est-ce que je trouve cette ligne ?
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
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
0
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
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 !
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
29 mars 2006 à 15:58
Je serai à compter de 20h00.

A+
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
29 mars 2006 à 20:28
Re,

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]$
0
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
c'est bon Lami, ca marche !
alors encore merci !
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
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
0
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
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
0
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
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.
0
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
c'Est bon, je viens de trouver:

system ("nedit fichier.txt");

ciao !
0
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
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.
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
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"
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
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
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
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
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
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
#! /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]$
0
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
merci Lami, je vais essayer ca au boulot !
0
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
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
}
0