[Perl] Remplacer Nieme occurence fichier plat
Résolu/Fermé
A voir également:
- [Perl] Remplacer Nieme occurence fichier plat
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier host - 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);
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
4 juin 2007 à 12:25
4 juin 2007 à 12:25
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 juin 2007 à 13:06
4 juin 2007 à 13:06
Si j'ai bien compris il voudrait à partir de ça :
toto|tata|titi||toutou|tonton| popo|papa|pipi||poupou|ponpon|Obtenir ça :
toto|tata|titi|C|toutou|tonton| popo|papa|pipi|C|poupou|ponpon|;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
4 juin 2007 à 13:26
4 juin 2007 à 13:26
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
4 juin 2007 à 18:49
4 juin 2007 à 18:49
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
4 juin 2007 à 18:58
4 juin 2007 à 18:58
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|