-3

我有 csv 文件和一个值。我想搜索这个值是否存在于 CSV 中。能否请您帮忙并告诉哪些代码可用于打开 CSV 文件,然后查找值是否在 CSV 中可用

4

4 回答 4

4
perl -lne 'if(/"your_value"/){print;exit}' your_csv_file

你为什么不简单地使用 grep 一个命令行这样的:

grep 'your_value' your_csv_file
于 2013-01-23T09:34:57.950 回答
1

如果你可以安装 CPAN 模块,试试这个:DBD::CSV,你可以像处理关系数据库一样处理你的文件,通过 DBI 的 SQL 接口查询。

于 2013-01-23T09:55:43.353 回答
0

如果您可以将您的价值放在正则表达式中,我认为这应该可行:

perl -p -e 'unless (m/,valueToSearchAsRegex,/) {$_=""}' filename

它将打印文件文件名中具有该值的所有

否则,如果您想在使用 Text::CSV 的 perl 程序中执行此操作,您可以尝试:

my $csv = Text::CSV->new();
open my $io, "<", $file or die "$file: $!";
my $found = 0;
while (my $row = $csv->getline ($io)) {
    my @fields = @$row;
    for my $field (@fields) {
        if ($field =~ m/valueToSearchAsRegex/) {
            $found = 1;
        }
    }
} 
于 2013-01-23T08:45:00.187 回答
0

我认为这就是你想要的:

#!/usr/bin/perl -w
use strict;

my $value = 'val6';
my @array = <DATA>;

foreach my $a (@array)
{
    my @array2 = split (/,/, $a);
    foreach my $b (@array2)
    {
        if ( $b eq $value )
        {
            print "Given Value is available in hte CSV\n";
        }
    }
}

__DATA__
val1,val2,val3,val4
val5,val6,val7,val7

输出

Given Value is available in hte CSV

如果您的 csv 文件很大,请确保不要将 csv 读入数组。改用带有 while 循环的文件句柄。

这是另一个镜头grep

#!/usr/bin/perl -w
use strict;

my $value = 'val5';
my @array = <DATA>;

my $out = grep { /$value/ } @array;
if ($out)
{
    print "Given value is present in the CSV\n";
}
else
{
    print "Given value is not present in the CSV\n";
}


__DATA__
val1,val2,val3,val4
val5,val6,val7,val7

输出:

Given value is present in the CSV
于 2013-01-23T09:22:43.823 回答