-1

約 10 ~ 20K のレコードがあり、特定の都市のみが必要です。これを perl で動作させたいのですが、必要なものの例が見つからないようです。都市が見つかった場合は、searchme.csv と list.csv でレコード/行を削除します。画面を並べ替えたり分割したりしていましたが、今では手で選ぶ方法がたくさんあります。どんな助けでも大歓迎です。私はただの初心者です。

  1. searchme.csv には、「name,address,city,state,zip,phone」というヘッダー付きの行が含まれています。
  2. list.csv には、ヘッダーが「city」の 1 行と、保持したい都市の 50 行以上が含まれています。
  3. したがって、searchme.csv の各行について、'city' を $variable に取得し、一致が見つかった場合は list.csv をループして、searchme.csv から新しいファイル new.csv に完全な行を書き込みます。これで遊ぶほど、searchme.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 に答える