|
|
|
|
Bonjour tout le monde,
je programme en perl et j'ai besoin de modifier des paramètres dans un fichier automatiquement. voici un extrait du fichier :
n 108
m 56
s 2
t 4
a 1 2 1
j'ai besoin d'accéder aux lignes 3 et 4 et de changer 2 et 4 par d'autres valeurs (se répète en boucle). Je n'ai pas su changer des valeurs à l'intérieur du fichier.
Est ce que quelqu'un pourrait me donner une indication.
Merci d'avance
Bonsoir,
#!/usr/bin/perl -w
use strict;
# D'abord charger le fichier:
open(FILE, "$fichier") || die "Erreur E/S:$!\n";
my @contenu = <FILE>;
close(FILE);
# Ensuite, changer à la ligne 3 et 4:
$contenu[2] =~ s/2/5/; # par exemple
$contenu[3] =~ s/4/6/; # par exemple
# Enfin on sauvegarde le fichier:
open(FILE, ">$fichier") || die "Erreur E/S:$!\n";
foreach my $ligne (@contenu) {
chomp $ligne;
print FILE "$ligne\n";
}
OK? -- O espirito da liberdade --
|
Salut kayari,
|
Bonjour,
|
Salut,
#!/usr/bin/perl
use warnings;use strict;
print "Veuillez saisir la date à rajouter au fichier (format jj/mm/aaaa, ex : 12/03/2007) : ";
chomp(my $date = <STDIN>);
open F_ECRIRE,">>resultat.txt" or die "E/S : $!\n";
chomp(my @fic = glob("*.txt"));
foreach my $e(@fic){
open F_LIRE,"$e" or warn "E/S : $!\n";
while(<F_LIRE>){
print F_ECRIRE "$date = $_";
}
}
__END__
ou en ligne de commande(il faut juste mettre la date que tu veux cat *.txt | perl -ne 's#(.*)#12/03/2007 = $1#;print' > resultat.txtDanbs les 2 cas le resultat on l'obtient dans le fichier resultat.txt. Donc avant de la 2ème variante il faut vider resultat.txt lami20j |
J'ai parler un peu trop vite ...
|
La ligne de commande fonctionne
jack@pc-jack:~$ ls *.txt f1.txt f2.txt f3.txt jack@pc-jack:~$ cat *.txt 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl jack@pc-jack:~$ cat *.txt | perl -ne 's#^#12/03/2007 = #;print' > resultat.txt jack@pc-jack:~$ cat resultat.txt 12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j |
Le script aussi
jack@pc-jack:~$ ls *.txt
f1.txt f2.txt f3.txt
jack@pc-jack:~$ cat f1.txt
05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
jack@pc-jack:~$ cat f2.txt
05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
jack@pc-jack:~$ cat f3.txt
05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
jack@pc-jack:~$ cat fic.pl
#!/usr/bin/perl
use warnings;use strict;
print "Veuillez saisir la date à rajouter au fichier (format jj/mm/aaaa, ex : 12/03/2007) : ";
chomp(my $date = <STDIN>);
open F_ECRIRE,">>resultat.txt" or die "E/S : $!\n";
chomp(my @fic = glob("*.txt"));
foreach my $e(@fic){
open F_LIRE,"$e" or warn "E/S : $!\n";
while(<F_LIRE>){
print F_ECRIRE "$date = $_";
}
}
__END__
jack@pc-jack:~$ ls resultat.txt
ls: resultat.txt: Aucun fichier ou répertoire de ce type
jack@pc-jack:~$ perl fic.pl
Veuillez saisir la date à rajouter au fichier (format jj/mm/aaaa, ex : 12/03/2007) : 12/03/2007
jack@pc-jack:~$ cat resultat.txt
12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
12/03/2007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl
12/03/2007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl
12/03/2007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl
lami20j |
Bon alors, tout compte fait, ça marche nickel merci
|
OK, c'est cool
|
Avant l'exécution de script
lami20j@debian:~/trash/chabrrr$ ls -1 staXiti_061207.txt staXiti_061208.txt staXiti_061209.txt xiti_stat.pl lami20j@debian:~/trash/chabrrr$ cat staXiti_061207.txt 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$ cat staXiti_061208.txt 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$ cat staXiti_061209.txt 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl Le script lami20j@debian:~/trash/chabrrr$ cat xiti_stat.pl
#!/usr/bin/perl
use warnings;use strict;
my @fic_stat = </home/lami20j/trash/chabrrr/staXiti*>;
foreach my $fichier (@fic_stat){
$fichier =~ /\/staXiti_(\d{4})(\d\d)\.txt/;
my $date = "${1}20$2";
my $fic = "resultat_" . "$date.txt";
open F_ECRIRE,">>$fic" or warn "E/S : $!\n";
open F_LIRE,"$fichier" or warn "E/S : $!\n";
while(<F_LIRE>){
s/^/$date = /;
print F_ECRIRE $_;
}
}
#*********** FIN TRAITEMENT **********#
#
# concateantion dans resultatfinal.txt
open F_ECRIRE,">>resultatfinal.txt" or die "E/S : $!\n";
my @fic_res = </home/lami20j/trash/chabrrr/resultat_*.txt>;
foreach my $e(@fic_res){
open F_LIRE,"$e" or warn "E/S : $!\n";
while(<F_LIRE>){
print F_ECRIRE;
}
}
__END__
Exécution de script lami20j@debian:~/trash/chabrrr$ perl xiti_stat.pl Le résultat lami20j@debian:~/trash/chabrrr$ ls -1 resultat_06122007.txt resultat_06122008.txt resultat_06122009.txt resultatfinal.txt staXiti_061207.txt staXiti_061208.txt staXiti_061209.txt xiti_stat.pl lami20j@debian:~/trash/chabrrr$ cat resultat_06122007.txt 06122007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$ cat resultat_06122008.txt 06122008 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122008 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122008 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$ cat resultat_06122009.txt 06122009 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122009 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122009 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$ cat resultatfinal.txt 06122007 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122007 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122007 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 06122008 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122008 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122008 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl 06122009 = 05:57:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl 06122009 = 05:57:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl 06122009 = 05:57:49 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl lami20j@debian:~/trash/chabrrr$lami20j
|
Voici le code qui fonctionne sous win
use warnings;use strict;
my @fic_stat = <"D:/Documents and Settings/Administrateur/Bureau/staXiti*">;
foreach my $fichier (@fic_stat){
$fichier =~ /\/staXiti_(\d{4})(\d\d)\.txt/;
my $date = "${1}20$2";
my $fic = "resultat_" . "$date.txt";
open F_ECRIRE,">>$fic" or warn "E/S : $!\n";
open F_LIRE,"$fichier" or warn "E/S : $!\n";
while(<F_LIRE>){
s/^/$date = /;
print F_ECRIRE;
}
}
#*********** FIN TRAITEMENT **********#
#
# concateantion dans resultatfinal.txt
open F_ECRIRE,">>resultatfinal.txt" or die "E/S : $!\n";
my @fic_res = <"D:/Documents\ and\ Settings/Administrateur/Bureau/resultat_*.txt">;
foreach my $e(@fic_res){
open F_LIRE,"$e" or warn "E/S : ICI $!\n";
while(<F_LIRE>){
print F_ECRIRE;
}
print F_ECRIRE "\n";
}
__END__
lami20j |
Voilà un aperçu ici http://cjoint.com/?dnmYCaei6z lami20j |