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