problème de substitution pour perl
Bonjour,
Je voudrais pouvoir remplacer sur une même ligne différentes variables
exemple:
etat initial
15.000000 1000.000000 300.000000
etat à obtenir
20.000000 300.000000 500.000000
La méthode en lisant les octets ne peut être employée car 1000 devient 300 donc un octet de moins.
Mon problème c'est que quand j'utilise cette fonction 's/15/20/' $filename, il me fait global automatiquement et donc il me remplace bien 15 par 20 ,1000 par 300 mais le 300 suivant n'est pas remplacé et c'est celui que je viens de faire qui passe à 500.
ça me donne donc 20.000000 500.000000 300.000000
si je fais 's/15/20' $filename, ça ne fais aucune modif.
j'ai essayé avec des tell() et seek() mais tell(fichier) contient -1 et si je fais seek(fichier,0,2); il ne me commence pas à la fin du fichier pour me remplacer 300 par 500.
Je ne vois plus comment faire.
Merci d'avance pour votre aide.:P
Cordialement.
(Une personne qui débute en perl).
Problème résolu : voici la solution que j'ai faite
Bonjour,
J'ai écrit en fin de compte le script suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
#!/usr/bin/perl -w
#
#use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
print "
<HTML>
<HEAD>
<TITLE>essai de script CGI</TITLE>
</HEAD>
<BODY>
Voici le texte de ma page testfichier
</BODY>
</HTML>
test_simple<br>";
open (FH, "/var/www/upload/parametre/dynamicsfile.inp")|| die "Pb d'ouverture FH";
open (FB, "/var/www/parametre/Calcul_A/pexpert1.txt")|| die "Pb d'ouverture FB";
open (FS, ">/var/www/upload/parametre/test.txt")|| die "Pb de creation test2";
my $filename = "/var/www/upload/parametre/test.txt";
while ($a=<FH>){
print FS "$a";
}
while ($b=<FB>){
@t=split(";",$b);
$uu=$t[0];
$vv=$t[1];
$ww=$t[2];
}
system ("perl -pi -e 's/xx/$uu/g' $filename");
system ("perl -pi -e 's/yy/$vv/g' $filename");
system ("perl -pi -e 's/zz/$ww/g' $filename");
close (FH, FB, FS); |
FB contient 20;300;500; si on ne met pas le dernier ";" il nous prend en compte l'espace suivant et donc dans le fichier il va à la ligne.
Dans FH j'ai mis ça :
1
xx.000000 yy.000000 55.000000 25.000000 25.000000 zz.000000 255.000000 1.000000 100.000000 45.840000
0 2 32759 0 100 0.000100
au lieu de
1
15.000000 1000.000000 55.000000 25.000000 25.000000 300.000000 255.000000 1.000000 100.000000 45.840000
0 2 32759 0 100 0.000100
Si ça peut aider quelqu'un qui pourrait avoir un problème similaire.
Cordialement.:)