[Perl] Remplacer Nieme occurence fichier plat
Résolu
Goten
-
Goten -
Goten -
Bonjour,
Comment remplacer dans un fichier de ce type:
toto|tata|titi||toutou|tonton|
popo|papa|pipi||poupou|ponpon|
Apres la 3ieme occurences de | par une valeur constante disons C?
Merci pour votre aide...Vous aurez compris c'est pour redresser un fichier plat.:)
Comment remplacer dans un fichier de ce type:
toto|tata|titi||toutou|tonton|
popo|papa|pipi||poupou|ponpon|
Apres la 3ieme occurences de | par une valeur constante disons C?
Merci pour votre aide...Vous aurez compris c'est pour redresser un fichier plat.:)
A voir également:
- [Perl] Remplacer Nieme occurence fichier plat
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
5 réponses
J'essaie un truc comme ça mais ça change rien :)
#!/usr/bin/perl
open(FICH, "data.txt");
while (<FICH>) {
if ( (index($_,"|") eq 3) ) {
$_ =~ s/|/C|/;
}
print "$_";
}
close(FICH);
#!/usr/bin/perl
open(FICH, "data.txt");
while (<FICH>) {
if ( (index($_,"|") eq 3) ) {
$_ =~ s/|/C|/;
}
print "$_";
}
close(FICH);
tu veux changer le 3ème | ou le caracactère après le 3ème | ?!
je vois que en fait le 3ème | et suis toute suite du 4ème
donc affiche c'est que tu veux obtenir comme résultat pour pouvoir t'aider
je vois que en fait le 3ème | et suis toute suite du 4ème
donc affiche c'est que tu veux obtenir comme résultat pour pouvoir t'aider
Salut,
je n'ai pas testé
En ligne de commande (modification directe avec sauvegarde de fichier original - data.txt original deviendra data.txt.orig)
lami20j
je n'ai pas testé
En ligne de commande (modification directe avec sauvegarde de fichier original - data.txt original deviendra data.txt.orig)
perl -pi.orig -e 's/^(.*\|.*\|.*\|)(\|.*)$/$1C$2/' data.txtou
perl -pi.orig -e 's/\|\|/|C|/' data.txtou
perl -pi.orig -e 's/(?<=\|)(?=\|)/C/' data.txtSous forme de script (la modification sera écrite dans un autre fichier)
#!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/^(.*\|.*\|.*\|)(\|.*)$/$1C$2/; # je vérifie les 3 premiers | print ECRIRE; } close LIRE; close ECRIRE; __END__ou
#!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/\|\|/|C|/;# j'ai remarqué un seul regroupement # s'il y a plusieurs on ne risque rien # seulement le 1er rencontré sera modifié print ECRIRE; } close LIRE; close ECRIRE; __END__ou
#!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/(?<=\|)(?=\|)/C/; # pareil comme la version 2 sauf que j'utilise les tests avant/arrière print ECRIRE; } close LIRE; close ECRIRE; __END__--
lami20j
Voilà le test avec la ligne de commande
$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| $ perl -pi.orig -e 's/^(.*\|.*\|.*\|)(\|.*)$/$1C$2/' data.txt $ cat data.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon| $ mv data.txt.orig data.txt $ perl -pi.orig -e 's/\|\|/|C|/' data.txt $ cat data.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon| $ mv data.txt.orig data.txt $ perl -pi.orig -e 's/(?<=\|)(?=\|)/C/' data.txt $ cat data.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon|
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et avec le script
1.
2.
1.
lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/^(.*\|.*\|.*\|)(\|.*)$/$1C$2/; # je vérifie les 3 premiers | print ECRIRE; } close LIRE; close ECRIRE; __END__ lami20j@debian:~/trash$ perl ccm.pl lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat date_res.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon|
2.
lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/\|\|/|C|/;# j'ai remarqué un seul regroupement # s'il y a plusieurs on ne risque rien # seulement le 1er rencontré sera modifié print ECRIRE; } close LIRE; close ECRIRE; __END__ lami20j@debian:~/trash$ perl ccm.pl lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat date_res.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon|3.
lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl open LIRE,"data.txt" or die "E/S : $!\n"; open ECRIRE, ">> date_res.txt" or die "E/S : $!\n"; while (<LIRE>){ s/(?<=\|)(?=\|)/C/; # pareil comme la version 2 #sauf que j'utilise les tests avant/arrière print ECRIRE; } close LIRE; close ECRIRE; __END__ lami20j@debian:~/trash$ perl ccm.pl lami20j@debian:~/trash$ cat data.txt toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon| lami20j@debian:~/trash$ cat date_res.txt toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon|