我有一些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