J'ai cet exemple de données Je voulais supprimer la virgule, en particulier la dernière virgule de la ligne, btw c'est le fichier .csv.
$line =~ s/,//g;
ce 2 code ne fonctionne pas, la dernière virgule est toujours là
$line =~ s/\,$//g;
et
W, S, Vbd2OX/NW, Vbd2OX/PW, Vbd3OX/NW, Vbd3OX/PW, ID,ID, 11200, V 11200, V 11200, V 11200, 6,1,0.69,5.56,-5.56,10.5,-10.12, 6,2,3.99,7,-5.13,-7,640.455,
3 Réponses :
S'il y a des espaces après la dernière virgule (ce qui semble être vrai pour quelques lignes), vous devez:
s/, *$//;
Pas besoin d'échapper à la barre oblique inverse d'une virgule; pas besoin de / g
lorsque vous voulez que la substitution se produise au plus une fois par ligne.
s /, \ s * $ //
pour une suppression des virgules de fin plus indulgente.
@tadman qui supprimerait également une nouvelle ligne, bit uniquement lorsqu'il y a une virgule de fin, ce qui semblait problématique
@kayegabato: Mais vous avez accepté celui qui n'explique rien, celui-ci explique!
Le code suivant fonctionne pour l'ensemble de données fourni
use strict; use warnings; while( <DATA> ) { /(.+)\,\s*/; print "$1\n"; } __DATA__ W, S, Vbd2OX/NW, Vbd2OX/PW, Vbd3OX/NW, Vbd3OX/PW, ID,ID, 11200, V 11200, V 11200, V 11200, 6,1,0.69,5.56,-5.56,10.5,-10.12, 6,2,3.99,7,-5.13,-7,640.455,
Ou une autre variante du code
use strict; use warnings; while( my $line = <DATA> ) { $line =~ s/\,\s*$//; print "$line\n"; } __DATA__ W, S, Vbd2OX/NW, Vbd2OX/PW, Vbd3OX/NW, Vbd3OX/PW, ID,ID, 11200, V 11200, V 11200, V 11200, 6,1,0.69,5.56,-5.56,10.5,-10.12, 6,2,3.99,7,-5.13,-7,640.455,
Cela semble être des données CSV, vous pouvez donc utiliser un analyseur / écrivain CSV pour résoudre ce problème.