-1

我有大约 10-20K 记录,只需要某些城市。我想在 perl 中完成这项工作,但我似乎找不到我所需要的示例。如果找到城市,则 searchme.csv 和 list.csv 删除记录/行。我正在对屏幕进行分类和拆分,但现在有很多人可以手动挑选。请任何帮助将不胜感激。我只是一个新人。

  1. searchme.csv 包含带有标题的“名称、地址、城市、州、邮编、电话”的行。
  2. list.csv 包含 1 行标题为“城市”和 50 多行我想保留的城市。
  3. 因此,对于 searchme.csv 中的每一行,将“城市”放入 $variable 并循环遍历 list.csv,如果找到匹配项,则将 searchme.csv 中的完整行写入新文件 new.csv。我玩的越多,我就越让它循环搜索me.csv,我想我需要将city.csv加载到数组中,然后在while循环中循环遍历数组。如果找到打印到 new.csv。
4

1 回答 1

0

我不能从你最后的评论中看出你是否还在做这件事。无论如何,这是一个需要考虑的解决方案。

use strict;
use warnings FATAL => 'all';
use autodie qw(:all);

# slurp files into arrays
open my $RECORDSFILE, '<', 'searchme.csv';
my @records = <$RECORDSFILE>;
close $RECORDSFILE;

open my $LISTFILE, '<', 'list.csv';
my @citychecklist = <$LISTFILE>;
close $LISTFILE;

open my $NEWFILE, '>>', 'new.csv';

my $cityidx = 2;
my $item;
my $record;

# loop through each record and extract the city string
foreach $record (@records) {
    my @data = split qr/,/, $record;
    my $city = $data[$cityidx];
    # skip the header
    next if $city eq 'city';

    # compare the city string with each city in our other list
    foreach $item (@citychecklist) {
        chomp $item;
        # if we find a match write out the record to another file
        if ($city eq $item) {
            print {$NEWFILE} $record;
        }
    }
}

close $NEWFILE;
于 2012-08-21T20:55:23.343 回答