rss
PerlPlus
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[Perl ou PHP] Besoin d'un exemple tout bête

fifto, le lundi 27 mars 2006 à 09:56:50
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
Répondre à fifto  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 27 mars 2006 à 11:35:18
Réponses données dans le forum "Linux"


# < 1 > - Novice en programmation cherche aide.
193.49.146.xxx - titan.info.univ-angers.fr Fermé dans le Forum Linux/Unix par jipicy le 27/03/2006 à 11:31Ajouté par mamiemando (27/03/2006 à 11:04 GMT+2)

La il faut que tu réflechisses à la manière dont tu vas générer ce graphique, sachant qu'il y a plein de méthodes :

Phase 1-2
Là il faut choisir ton langage. Personnellemment j'aime bien le python mais ça se fait aussi en ruby ou en perl... Eviter le bash ou le shell.

On pourrait même imaginer que tu le fasses direct en PHP si par exemple l'utilisateur upload ses points sur un site, et que tu lui renvoie le graphe... Mais cela suppose que tu aies un serveur apache d'installé.

Phase 3-5
1) génération d'un fichier SVG (mais requiert l'installation d'un plugin sur le navigateur client), graphe vectoriel
2) utilisation de gd
3) utilisation de gnuplot (à mon avis la plus simple des trois méthodes si tu utilises un script)

Phase 6-7
Si tu as fait un script, il ne reste plus qu'à appeler le navigateur en passant en paramètre l'url de la page générée, qui aura grosso modo cette forme :
<html>
<body>
Mon joli graphe :
<img src="mon_joli_graphe.png">
</body>
</html>
Précise-nous ce que tu préfères pour chacunes de ces phases.

Bonne chance

[ Modérer ]
[ Alerter un modérateur ][ Autres messages de mamiemando ][ 193.49.146.xxx - titan.info.univ-angers.fr ]


# < 4 > - Novice en programmation cherche aide.
81.173.212.xxx - ... Fermé dans le Forum Linux/Unix par jipicy le 27/03/2006 à 11:31Ajouté par fifto (27/03/2006 à 11:27 GMT+2)

Merci mamiemando !!

Ben je vais essayer d'utiliser le perl.

pour la phase 3-5 je vais essayer d'utiliser gnuplot

Qu'entends-tu par "en passant en paramètre l'url de la page générée" s'il te plait ?

Bon merci ! maintenant, je vais m'y mettre ! Du moins tenter d'essayer hum hum...

Miguel Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
mamiemando, le mardi 28 mars 2006 à 09:28:33
1) Lire les données, conserver ce que tu veux. Ca c'est la partie en perl qui lit ton fichier d'entrée, je te laisse faire ta sauce.

2) Générer les fichiers gnuplot. Dans ton cas tu en as deux : un fichier .dat, contenant les points, et un fichier .gnu, qui contient les instructions pour gnuplot, notamment tout ce qui est mise en forme et appel au fichier .dat. Exemple (source http://www.duke.edu/~hpgavin/gnuplot.html):

force.dat
      0.000              0              0    
      0.001            104             51
      0.002            202            101
      0.003            298            148
      0.0031           290            149
      0.004            289            201
      0.0041           291            209
      0.005            310            250
      0.010            311            260
      0.020            280            240

force.gnu
      # Gnuplot script file for plotting data in file "force.dat"
      # This file is called   force.p
      set   autoscale                        # scale axes automatically
      unset log                              # remove any log-scaling
      unset label                            # remove any previous labels
      set xtic auto                          # set xtics automatically
      set ytic auto                          # set ytics automatically
      set title "Force Deflection Data for a Beam and a Column"
      set xlabel "Deflection (meters)"
      set ylabel "Force (kN)"
      set key 0.01,100
      set label "Yield Point" at 0.003,260
      set arrow from 0.0028,250 to 0.003,280
      set xr [0.0:0.022]
      set yr [0:325]
      plot    "force.dat" using 1:2 title \'Column\' with linespoints , \\
            "force.dat" using 1:3 title \'Beam\' with points

3) Il ne reste plus qu\'à appeler gnuplot. De deux choses l'une, soit tu dessines dans une fenêtre (pas besoin du coup de navigateur !), soit dans un fichier dessin (par exemple un png) en vue de l\'intégrer dans un fichier html. C'est le rôle de la fonction set terminal dans le fichier .gnu :
set terminal png
set output plop.png

Plus de détails ici :
http://fr.wikipedia.org/wiki/Gnuplot

4) A partir de là tu peux fermer les fichiers .dat et .gnu, ils sont terminés. Supposons que tu veuilles générer un png, il faut maintenant appeler gnuplot depuis ton script perl.
Tu peux te baser sur :
http://www.hep.ucl.ac.uk/~ytl/misc/gnuplot/gnuplot_01.html
Ca consisterait à taper dans un terminal :
gnuplot force.gnu


5) Il ne reste plus qu'à générer le fichier html come indiqué dans le post précédent, fermer le fichier html, et appeler le navigateur :
firefox fichier.html

Bonne chance
Répondre à mamiemando

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mardi 28 mars 2006 à 10:43:58
tu sais ou je peux telecharger gnuplot pour unix s'il te plait ?
Et tu sais comment on l'installe ?

J'ai beau chercher sur le net, rien de très précis...

Miguel
Répondre à fifto

59


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 nath, le mardi 23 janvier 2007 à 16:48:36
gnuplot est normalement installé sur toutes les distribution linux par defaut
pour le tester tape gnuplot dans une console
Répondre à nath

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 28 mars 2006 à 13:18:14
Salut à tous,

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 ?

Je te parle de Perl.

Voilà un exemple.

1. Tu dois editer un fichier dont tu l'appel mon_script

Dédans tu écrit

#! /usr/bin/perl
# il faut taper la commande whereis perl pour localiser perl sur ton pc
# si perl n'est pas dans /usr/bin/perl alors il faut changer

# ce le chemin vers l'interpreteur perl

use warnings;
use strict;

my ($r1,$r2) = (2,4);

my $sum = $r1 +$r2;

print "La somme $r1 + $r2 = $sum\n";


2. tu enregistres le fichier (tu peux utiliser l'extension .pl)

3. pour l'exécuter tu as 2 posibités

- tu le rend exe avech chmod -v 0755 mon_script
tu peux l'exécuter avec /chemin/vers/mon_script

- tu peux utiliser la commande perl
perl /chemin/vers/mon_script

Si tu ne sais pas je pourrai faire ta sauce en Perl, il faut seulement me dire que veut tu extraire de ton fichier.

Donc le fichier de depart et les les données que tu veux extraire.


lami20j

P.S.

http://www.gnuplot.info/ regarde le lien download
http://gershwin.ens.fr/vdaniel/Doc-Locale//Outils-Gnu-Linux/Gnuplot/Doc-French/tr...
http://www.info.univ-angers.fr/~gh/tuteurs/tutgnuplot.htm
Répondre à lami20j

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mardi 28 mars 2006 à 14:02:00
salut lamy20j !

Merci !

Bon voilà à quoi ressemble le fichier de départ fichier1.txt, sachant que ce qui m'interesse ce sont les données en dessous des colonnes T1 et T3:

------------ début fichier1.txt ---------------------
okokokok
,,,
....
e f g
100 1 2 3
-*----OLOAD
D I S P L A C E M E N T V E C T O R
POINT ID. TYPE T1 T2 T3
1048 G 5.3E-04 -9.8E-03 2.34E-02
1049 G 1.74E-05 1.3E-05 2.305E-03
1050 G -4.9E-05 -4.27E-05 -1.192E-02
----------
*********
commentaires
SUBCASE
D I S P L A C E M E N T V E C T O R
POINT ID. TYPE T1 T2 T3
201 G 5.3E-04 -9.8E-03 2.34E-02
202 G 2.78E-05 1.3E-05 2.99E-03
305 G -4.9E-05 -4.27E-05 -1.192E-02
1 * * * END OF JOB * * *
------------------- fin fichier1.txt ---------------------------



Les données qui m'interessent, ce sont les données en dessous de chaque "D I S P L A C E M E N T V E C T O R". Ce sera le mot clé je suppose pour detecter qu'on commence à lire un tableau avec les valeurs.
Et donc, j'aimerais que l'utilisateur puisse choisir les ID. des points qui l'interessent. Si il rentre par exemple 1049 202 et 305, il faudrait que le fichier texte cible, c'est à dire fichier2.txt, ait cette tronche là:



---------------------- début fichier2.txt ---------------------
# T1 T3
1.74E-05 2.305E-03
2.78E-05 2.99E-03
-4.9E-05 -1.192E-02
----------------------- fin fichier2.txt -----------------------

En remarquant que seules les données correspondant aux colonnes T1 et T3 m'interessent.

Si t'arrives à faire ca, tu me sauves la vie !!!
Miguel
Répondre à fifto

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 28 mars 2006 à 14:37:55
Re,

oui je peux le faire, mais ça sera pour ce soir.

Mets ici ton fichier http://cjoint.com et donne le lien.
Répondre à lami20j

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mardi 28 mars 2006 à 14:41:48
Salut,

"lami20j" t'as déjà donné un début de réponse dans ton autre post, là plus précisément :
http://www.commentcamarche.net/forum/affich-2165682-perl-extraction-de-donnees-d-...

ainsi que moi (mais dans un autre langage, le bash, propre à tous les Unix) :
http://www.commentcamarche.net/forum/affich-2165682-perl-extraction-de-donnees-d-...

Le même script, mais plus adapté à ton problème (3 valeurs + le nom du fichier passé en paramètres) :
[jp@MDK tmpfs]$ cat file.txt
okokokok
,,,
....
e f g
100 1 2 3
-*----OLOAD
D I S P L A C E M E N T V E C T O R
POINT ID. TYPE T1 T2 T3
1048 G 5.3E-04 -9.8E-03 2.34E-02
1049 G 1.74E-05 1.3E-05 2.305E-03
1050 G -4.9E-05 -4.27E-05 -1.192E-02
----------
*********
commentaires
SUBCASE
D I S P L A C E M E N T V E C T O R
POINT ID. TYPE T1 T2 T3
201 G 5.3E-04 -9.8E-03 2.34E-02
202 G 2.78E-05 1.3E-05 2.99E-03
305 G -4.9E-05 -4.27E-05 -1.192E-02
1 * * * END OF JOB * * *


[jp@MDK tmpfs]$ cat batch.sh
#! /bin/bash

egrep "$1|$2|$3" < $4 | awk '{ print $3" "$5 }'>> fichier.txt

[jp@MDK tmpfs]$ sh batch.sh 1049 202 305 file.txt

[jp@MDK tmpfs]$ cat fichier.txt
1.74E-05 2.305E-03
2.78E-05 2.99E-03
-4.9E-05 -1.192E-02

[jp@MDK tmpfs]$
Par contre il serait bien de savoir si les paramètres (valeurs) seront toujours constantes (au nombre de 3) ou variables ?
Et si le fichier de référence est lui aussi constant ?
Et si dans le fichier de destination, les valeurs doivent être écrasées ou implémentées ?

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mardi 28 mars 2006 à 15:05:56
voilà Lami !
Le fichier1.txt se trouve là:
http://cjoint.com/?dCo0QJ4wvr

Pour répondre à jipicy, les valeurs varient en fonction du calcul effectué. C'est à dire que tous les fichiers texte de référence seront différents. La structure reste cependant la même, c'est à dire :

D I S P L A C E M E N T V E C T O R
POINT ID. TYPE T1 T2 T3


les valeurs en dessous changent....


PAr contre, il y a plus que 3 colonnes. Ca se limite pas à T1 T2 et T3 mais c'Est toujours de ce type là :


D I S P L A C E M E N T V E C T O R

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

mais moi ce qui m'interesse c'est juste les valeurs de deux colonnes, comme par exemple T1 et T2 pour tracer un graphique.

Il faut en fait que le programme demande à l'utilisateur quelles valeurs il a besoin et pour quels points. Le nb de valeurs c'est toujours 2, c'est à dire T1 et T3, ou T2 et R1. Par contre, le nb de points peut varier. de 1 à l'infini. C'est à l'utilisateur de préciser quand c'est fini. Genre avec une question qui s'affiche "rajouter des points ? oui / non "

Pour ce qui est du fichier de destination, fichier2.txt, on peut faire tout de qu'on veut du moment qu'il contienne les valeurs choisies et que ces valeurs soient dans deux colonnes, par exemple:

# T1 T3
1.599571E+01 -3.111541E+00
1.009300E-03 -8.895236E-02


de manière À ce que je puisse appeler ce fichier avec gnuplot pour pouvoir tracer une courbe en deux dimensions.

Voili voilou
Répondre à fifto

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mardi 28 mars 2006 à 15:07:49
au fait jipicy, le script que t'as écrit c'Est du batch ? c'Est pas du perl ?

(Peut etre que je suis en train de dire une connerie là, vu mon niveau...)

Ce qui est sûr, c'Est que je dois utiliser du perl.
Répondre à fifto

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 28 mars 2006 à 16:36:23
Re,

tu ne dit pas des conneries. J'attends ton fichier. A ce soir.
Répondre à lami20j

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mardi 28 mars 2006 à 16:40:51
voilà Lami !
Le fichier1.txt se trouve là:
http://cjoint.com/?dCo0QJ4wvr
Répondre à fifto

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 28 mars 2006 à 21:24:14
Re,

teste et dit si tu as des erreurs.
#! /usr/bin/perl
#
use warnings;
use strict;

@ARGV = qw (/home/lami/fifto_joint);
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
my $e = 'o';
my (@elem,@fin);

print "Choisissez T1T3 ou T2R1 : ";
chomp(my $choix = <STDIN>);

while ( $e ne 'n'){
        print "Entrez un point [ n pour quitter ]: ";
        chomp( $e = <STDIN>);
        push @elem,$e;
}

while (<>) {
        if (/\d{1,4}.*/ && /$q\s*$q\s*$q/){
                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 "$choix\n";
foreach my $e (@elem) {
        foreach my $f(@fin){
                print substr($f,length($e) + 1) if $f =~ /^$e\s/;
        }
}
Répondre à lami20j

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 28 mars 2006 à 21:47:34
Re,

j'ai oublié d'envoyer le résultat vers un fichier (je l'ai affiché sur STDOUT).

Automatiquement on fichier sera créer avec le nom T1T3.txt ou T2R1.txt.

A savoir qu'il faut remplacer les parties de codes que tu vois en gras en fonction de ta configuration. C'est à dire il faut mettre en 1er le chemin vers le fichie en entrer et en 2ème le chemin vers le fichier en sortie.

Je n'ai pas mis de commentaires, si tu as besoin fait un signe.
Je n'ai pas crée un gestionnaire des erreurs.
#! /usr/bin/perl
#
use warnings;
use strict;

@ARGV = qw (/home/lami/fifto_joint);
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
my $e = 'o';
my (@elem,@fin);

print "Choisissez T1T3 ou T2R1 : ";
chomp(my $choix = <STDIN>);

open FIC_W, ">>","/home/lami/$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}.*/ && /$q\s*$q\s*$q/){
                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/;
        }
}
P.S. Signale les erreurs s'il te plaît. Merci.
Répondre à lami20j

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 09:38:23
ok merci, je vais essayer de comprendre ce que t'as fait.

En attendant, je l'ai lancé, en devant retirer la ligne use warning car elle empeche de faire tourner le programme ici, et j'ai les messages d'erreur suivants :

TRNG_MUNC::essai2lami> ./script2.pl
Bareword "qr" not allowed while "strict subs" in use at ./script2.pl line 6.
Bareword "b" not allowed while "strict subs" in use at ./script2.pl line 6.
/[1-9]\.\d+e(/: unmatched () in regexp at ./script2.pl line 6.

Par contre, en retirant use strict en plus, j'obtiens ca:

TRNG_MUNC::essai2lami> ./script2.pl
/[1-9]\.\d+e(/: unmatched () in regexp at ./script2.pl line 5.


Voici donc le script (j'ai adapté les chemins)

#! /usr/bin/perl
#

@ARGV = qw (TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\fichier1.txt);
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
my $e = 'o';
my (@elem,@fin);

print "Choisissez T1T3 ou T2R1 : ";
chomp(my $choix = <STDIN>);

open FIC_W, ">>","TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\$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}.*/ && /$q\s*$q\s*$q/){
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/;
}
}
Répondre à fifto

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 09:49:07
ouais, je veux bien que tu me mettes les commentaires parce que là je me casse la tête...

En tout cas c'Est sympa de ta part.
PS: C'était juste hier la grève en France ?
Répondre à fifto

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 11:16:08
J'ai detecté une premiere erreur:

on écrit pas

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";

J'ai testé, je confirme.

Bon je continue à déchiffrer...
Répondre à fifto

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 11:49:51
En continuant À déchiffrer, j'ai réussi à identifier ce qui est correct à 100 % dans le programme :


print "Choisissez T1T3 ou T2R1 : ";
chomp(my $choix = <STDIN>);

open(FIC_W,">>choix.txt") || 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 (<>) {

Bon c'Est qu'un début d'accord. Mais j'ai encore jamais programmé !
JE continue donc...

Ce qui pourrait bien me dépanner, c'est de comprendre ces deux lignes là :

@ARGV = qw (TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\fichier1.txt);
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;

Surtout la deuxieme... je trouve pas "qr" dans les tutoriaux.

Merci
Répondre à fifto

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 12:55:04
Bon voilà, j'en suis là: en caractères gras c'est tout ce que je comprend pas:


#! /usr/bin/perl
#

@ARGV = qw (TRNG_MUNCH\MWESTEEL\Grafik_html_aus_f06_Datei\1\fichier1.tx­t);
my $q = qr /\b-?[1-9]\.\d+e(?:\+|-)\d\d\b/i;
my $e = 'o';
my (@elem,@fin);

print "Choisissez T1T3 ou T2R1 : ";
chomp(my $choix = <STDIN>);

open(FIC_W,">>choix.txt") || 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}.*/ && /$q\s*$q\s*$q/){
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/;
}
}

Je continue...
Répondre à fifto

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mercredi 29 mars 2006 à 13:10:58
Salut,

J'ai detecté une premiere erreur:

on écrit pas

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";

J'ai testé, je confirme.


Il faut comprendre le principe http://www.linux-france.org/prj/jargonf/T/TMTOWTDI.html


Donc les 2 expressions sont équivalentes, ce n'est pas une erreur ni de syntaxe ni de logique.

En français

ouvre vers,en mode ajoute, fichier ou meurs - mon ex

ouvre vers le fichier mode ajoute ou meurs - ton ex

Cependant celle que j'ai écrit je la préfère pour 2 raison :

- open à 3 arguments pour eviter les ambiguités

- or pour sa précédence donc on n'a pas besoin de paranthèses.

Je suis au boulot, et je n'ai pas le temps pour repondre à tous tes messages.

Je t'écrirai ce soir avec plus des détails.
Quand je t'ai demandé de me dire les erreurs je ne parlais pas de code (qui fonctionne, figure toi que je l'ai testé et pas une seule fois).
Je parlais de résultat qu'on obtiens.

Le script tu l'éxecutes sans arguments et ça c'est grace à @ARGV

En fait l'opérateur <> lit d'abord dans @ARGV et s'il y a rien il lit depuis STDIN


Pour qr// regard ici http://www.bribes.org/perl/docfr/perlop.html#L7D40F9C5

Perl fournit des caractères standard pour cela mais fournit aussi le moyen de choisir vos propres caractères. Dans la table suivante, le {} représente n'importe quelle paire de délimiteurs que vous aurez choisie.

     Standard  Générique    Signification       Interpolation
        ''       q{}         Littérale            non
        ""      qq{}         Littérale            oui
        ``      qx{}          Commande            oui (sauf si délimiteur '')
                qw{}        Liste de mots         non
        //       m{}   Reconnaissance de motif    oui (sauf si délimiteur '')
                qr{}           Motif              oui (sauf si délimiteur '')
                 s{}{}       Substitution         oui (sauf si délimiteur '')
                tr{}{}     Translittération       non (voir plus bas)

En fait on utilise qr comme opérateur des regex.

Ca evite déjà de retaper la même regex plusieurs fois
Aussi quand tu veux corriger la regex tu ne le fait qu'une seule fois
Aussi pour la compilation de la regex.

A ce soir tu auras plus des détails. Maintenant tu peux modifier le code comme tu veux, dans Perl il n'y a pas des limites inutiles, cependant il faut faire attention puisqu'il y a plein des pièges.

lami20j
Répondre à lami20j

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fifto, le mercredi 29 mars 2006 à 13:40:31
ok d'accord, je regarde ca de plus près.

PAr contre tu dis que le code marche ???

Je comprend pas pourquoi il marche pas chez moi. T'as bien pris le fichier1.txt que je t'ai envoyé ?

Miguel
Répondre à fifto
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger Firstpage 2006Firstpage - First Page 2006 est un éditeur html gratuit et excellent. Il permet de travailler un code HTML en couleur, ainsi que de...Catégorie: Editeurs HTML
Licence: Freeware/gratuit
Télécharger Jedit 4.2Jedit - Editeur de texte capable de supporter la majeure partie des langages de programmation (perl,java,php,c,asp, etc.) et...Catégorie: Développement
Licence: Open Source
Télécharger Better Gmail 2 0.6.1Better Gmail - Better Gmail est une compilation des meilleures améliorations Greasemonkey pour la nouvelle interface de Gmail, tout ceci...Catégorie: Courrier électronique
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [Perl ou PHP] Besoin d'un exemple tout bête »