Aide - Recherche - Membres - Calendrier
Version complète : PERL : problème de substitution
Forum Développeur - Administration serveur, programmation et base de données > Programmation > Autres langages
claire63
Bonjour,
Je voudrais pouvoir remplacer dans un fichier différentes variables d'une même ligne.

par exemple :
etat initial
15.000000 1000.000000 300.000000
etat à obtenir
20.000000 300.000000 500.000000

Par la methode des octets, ce n'est pas faisable puisque on remplace 1000 par 300 donc un octet de moins.

Par la methode de la substitution, je suis concé car il me remplace bien 15 par 20 ,1000 par 300 mais le 300 par 500 c'est celui qui vient d'être fait et non pas le dernier, ce qui donne 20.000000 500.000000 300.000000.

Mon soucis c'est que pour l'instant c'est des valeurs en durs pour mes tests donc à ce moment là vu que je sais que 300 y est 2 fois je remplace d'abord 15 par 20, 300 par 500 puis 1000 par 300.

Mais à terme, ses valeurs seront récupérées d'un autre fichier et donc on ne saura pas ce qu'elles contiennent et les valeurs devront être placé au bon endroit pour que le traitement suivant soit valide.

Merci d'avance pour votre aide. icon_smile.gif
Cordialement.

zebden
Ça devient vite lourd de calculer par octets.

Pourquoi ne pas tout réécrire dans le fichier ?

/// T'ouvre le fichier
/// Traitement des valeurs.
/// Réécriture complète des valeurs dans le même fichier (vidé).
claire63
Citation (zebden @ Jan 14 2008, 02:11 PM) *
Ça devient vite lourd de calculer par octets.

Pourquoi ne pas tout réécrire dans le fichier ?

/// T'ouvre le fichier
/// Traitement des valeurs.
/// Réécriture complète des valeurs dans le même fichier (vidé).


Bonjour,
Je veux bien faire comme ça mais le soucis c'est que ses valeurs sont sur la même ligne.
Si je traite mon fichier par ligne comme on le voit souvent das les exemples de perl alors je vais me retrouver avec le même problème pour la substitution ou alors cela veut dire que "j'ai loupé un épisode".
J'ai aussi essayé avec des tell() et des seek() mais je me retrouve à chaque fois avec un tell à -1, même si je démarre de la fin de fichier seek(fichier,0,2);
Merci d'avance pour votre réponse.
Cordialement.
claire63
Bonjour,
Le problème est résolu.
Merci pour votre aide.
J'ai écrit en fin de compte le script suivant :
Code
#!/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.smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.