Perl 使用嵌入式逗号高效解析 CSV 并添加到数据库
Perl Parsing CSV Efficient with Embedded Commas and Adding To Database
如何将正则表达式应用于数组。在阅读我的 csv 文件时,我应用了这个...
s/, /- /g;
s/1,000/1000/g;
但是在我将数据放入多维数组后,我不知道如何将逗号插入到我的字段中。
要解析 CSV,请使用像 Text::CSV
这样的 CPAN 模块。您可以对返回的值使用正则表达式。
首先,您可以使用一些 CSV 模块轻松实现此目的,但在某些情况下,我知道人们无法访问或无法安装包。因此,如果是这种情况,这应该会有所帮助。
如果我没听错,你正试图从 CSV 中写入字段,其中嵌入了 commas.If 这种情况,这些嵌入的逗号字段应该有括号或引号,以确保它们不被视为 CSV 的逗号分隔字段。然后我们可以获取您的 CSV 中的所有数据。在这种情况下,我们将有一个 csv,它使用括号、引号和两者来显示使用嵌入式逗号的数据:
这些显示 CSV 逗号:
"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)"
^ ^
这些是嵌入式逗号:
"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)"
^ ^ ^ ^
因此下面将使用括号和双引号搜索和替换数据,以确定哪些是 csv 逗号,哪些是嵌入的。
use strict;
use warnings;
my $string = '(Potatoes 1,000), "Tomatoes, 200", "(GemSquash, 1,029.95)"';
my $query = qr/(?: "\( ( [^()""]* ) \)" | \( ( [^()]* ) \) | " ( [^"]* ) " | ( [^,]* ) ) , \s* /x;
my @results = grep defined, "$string," =~ /$query/g;
print "$_\n" for @results;
结果
Potatoes 1,000
Tomatoes, 200
GemSquash, 1,029.95
如何将正则表达式应用于数组。在阅读我的 csv 文件时,我应用了这个...
s/, /- /g;
s/1,000/1000/g;
但是在我将数据放入多维数组后,我不知道如何将逗号插入到我的字段中。
要解析 CSV,请使用像 Text::CSV
这样的 CPAN 模块。您可以对返回的值使用正则表达式。
首先,您可以使用一些 CSV 模块轻松实现此目的,但在某些情况下,我知道人们无法访问或无法安装包。因此,如果是这种情况,这应该会有所帮助。
如果我没听错,你正试图从 CSV 中写入字段,其中嵌入了 commas.If 这种情况,这些嵌入的逗号字段应该有括号或引号,以确保它们不被视为 CSV 的逗号分隔字段。然后我们可以获取您的 CSV 中的所有数据。在这种情况下,我们将有一个 csv,它使用括号、引号和两者来显示使用嵌入式逗号的数据:
这些显示 CSV 逗号:
"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)"
^ ^
这些是嵌入式逗号:
"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)"
^ ^ ^ ^
因此下面将使用括号和双引号搜索和替换数据,以确定哪些是 csv 逗号,哪些是嵌入的。
use strict;
use warnings;
my $string = '(Potatoes 1,000), "Tomatoes, 200", "(GemSquash, 1,029.95)"';
my $query = qr/(?: "\( ( [^()""]* ) \)" | \( ( [^()]* ) \) | " ( [^"]* ) " | ( [^,]* ) ) , \s* /x;
my @results = grep defined, "$string," =~ /$query/g;
print "$_\n" for @results;
结果
Potatoes 1,000
Tomatoes, 200
GemSquash, 1,029.95