1
votes

comment supprimer la virgule en perl

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,


1 commentaires

Cela semble être des données CSV, vous pouvez donc utiliser un analyseur / écrivain CSV pour résoudre ce problème.


3 Réponses :


6
votes

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.


3 commentaires

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!



0
votes

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,


0 commentaires

1
votes

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,


0 commentaires