我有一些csv文件被错误地导出。包含数字的某些字段被错误地导出为字符串,小数位以逗号而不是点。复杂正则表达式用逗号替换逗号,然后删除引号
下面是几个例子:
"GREEN,"15,4",55,"15,5",64,"17,0","18,9",107,145,21,38, "BLUE","15,1",46,"15,2",51,"11,4","13,5",89,96,25,7,
所以,我想逗号切换点中数字的引号,然后从所有号码删除引号。
任何人都可以帮我一下吗?
我有一些csv文件被错误地导出。包含数字的某些字段被错误地导出为字符串,小数位以逗号而不是点。复杂正则表达式用逗号替换逗号,然后删除引号
下面是几个例子:
"GREEN,"15,4",55,"15,5",64,"17,0","18,9",107,145,21,38, "BLUE","15,1",46,"15,2",51,"11,4","13,5",89,96,25,7,
所以,我想逗号切换点中数字的引号,然后从所有号码删除引号。
任何人都可以帮我一下吗?
使用CSV解析器,这变得容易:以上
#!/usr/bin/perl
use warnings;
use strict;
use Text::CSV_XS;
my $csv = Text::CSV_XS->new({ binary => 1, auto_diag => 1 });
while (my $row = $csv->getline(\*DATA)) {
s/,/./ for @$row;
$csv->say(\*STDOUT, $row);
}
__DATA__
"GREEN","15,4",55,"15,5",64,"17,0","18,9",107,145,21,38,
"BLUE","15,1",46,"15,2",51,"11,4","13,5",89,96,25,7,
示例使用内联数据,使其可以运行独立的 - 你可能会想要使用的输入和输出文件,而不是DATA
和STDOUT
。
如果您特别想保留“字符串”而不是“数字”的引号,那么您可以使用keep_meta_info
或仅在需要时重新添加引号。
为什么downvote?这是正确的解决方案! – Toto
也许因为正则表达式太泛型,可能会匹配一个合法的字符串? –
为什么downvoted? – vks
如果你表明你已经试图自己解决这个问题,你会发现人们会更加慷慨地帮助你 – fugu
你的例子**令人困惑**哪些数字被引用包围? –
@Meninx我猜'15,4“'的值应该变成不带引号的'15.4'。 – michaPau