|
|
|
|
Configuration: Windows XP Firefox 2.0
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); |
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 lami20j
|
Salut,
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| lami20j |
et avec le script
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|
lami20j
|
| 26/02 16h52 | Sed - Introduction à SED - Part III | Sed |
| 10/02 11h16 | Codes d'erreur de Windows | Windows |
| 12/06 12h22 | Réinstaller Windows XP | Windows XP |
| 14/09 10h42 | [Programmation] Critères de choix d'un langage/framework | Programmation |
| 05/01 18h57 | Sed - Supprimer une ou plusieurs lignes d'un fichier | Sed |
| 23/06 23h47 | [Shell/Perl] Remplacer un MdP dans un fichier | 5 |
| 01/08 11h16 | Sqlloader pour alimenter un fichier plat ? | 4 |
| 22/07 09h56 | [VBA] nieme occurence | 2 |
| 15/07 14h31 | [perl] comment déplacer un fichier | 1 |
![]() | ActivePerl - ActivePerl est un interpréteur Perl gratuit et puissant pour plates formes Microsoft Windows. Il nécessite "Microsoft... | Catégorie: Perl Licence: Open Source |
![]() | PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,... | Catégorie: Développement Licence: Freeware/gratuit |
![]() | AVISplit Classic - AVISplit permet de découper et d'assembler des morceaux d'une vidéo au format AVI dans l'ordre souhaité, comme tout bon... | Catégorie: Edition vidéo Licence: Freeware/gratuit |
![]() | Crimson Editor - Crimson Editor est un éditeur professionnel de code source pour Windows. Ce programme, très léger en terme de taille,... | Catégorie: Webmaster Licence: Freeware/gratuit |
![]() | Formac 2010 Platinum | Catégorie: Moniteur LCD | |
![]() | Cocoto Platform Jumper | Catégorie: Jeu vidéo Gameboy Advance | 7.82 € PriceMinister |
![]() | Speed-Link RF Plate Metal | Catégorie: Souris | 14.25 € Grosbill.com |
![]() | Creative Sound Blaster X-Fi | Catégorie: Carte son | 169.99 € Rue du Commerce |