簡體   English   中英

Perl在正則表達式匹配和打印時檢索數組的索引

[英]Perl retrieve index of array on regex match and print

我希望在逗號(或制表符)分隔文件中根據標題名稱提取列。 我有一個標量變量,它匹配許多標題可能性我名為'$ Acct_Name',其中包括。 我想讀取文件(列標題),將其與'$ Acct_Name'中的匹配,並打印匹配的列及其數據等。

這是我的代碼:

open(FILE, "list_2.txt") or die "Cannot open file: $!";
my $Account_Name = qr/^Acct ID$|^Account No$|^Account$|^ACCOUNT NUMBER$|Account Number|Account.*?Number|^Account$|^Account #$|^Account_ID$|^Account ID$/i;
my $CLIENT = qr/^CLIENT_NAME$|^Account Long Name$|^ACCOUNT NAME$|^Account Name$|^Name$|portfolio.*?description|^Account Description$/i;

while (my $line = <FILE>) {
    chomp $line;
    my @array = split(/,/, $line);
    my %index;
    @index{@array} = (0..$#array);
    my $Account_Name_ = $index{$Account_Name};
    if (my ($matched) = grep $array[$_] =~  /$Account_Name/, 0..$#array) {
        $Account_Name_ = $matched;
        my $CLIENT_ = $index{$CLIENT};
        if (my ($matched) = grep $array[$_] =~  /$CLIENT/, 0..$#array) {
            $CLIENT_ = $matched;
            print $array[$Account_Name_],",",$array[$CLIENT_],"\n";
        }
    }
}

close(FILE);

數據,list_2.txt

帳號,order_num,名稱
dj870-1234,12334566,josh trust 1992

我的結果

帳號,姓名

絕望了

帳號,姓名
dj870-1234,喬希

出於某種原因,我只能根據匹配打印列名。 我怎樣才能獲取數據?

您需要移動print語句來輸出數據行 - 這些不匹配,因此在原始代碼中永遠不會達到print語句!

use warnings;

open(FILE, "list_2.txt") or die "Cannot open file: $!";
my $Account_Name = qr/^Acct ID$|^Account No$|^Account$|^ACCOUNT NUMBER$|Account Number|Account.*?Number|^Account$|^Account #$|^Account_ID$|^Account ID$/i;
my $CLIENT = qr/^CLIENT_NAME$|^Account Long Name$|^ACCOUNT NAME$|^Account Name$|^Name$|portfolio.*?description|^Account Description$/i;

my ($Account_Name_, $CLIENT_);
while (my $line = <FILE>) {
    chomp $line;
    my @array = split(/,/, $line);
    if (my ($matched) = grep $array[$_] =~  /$Account_Name/, 0..$#array) {
        $Account_Name_ = $matched;
        if (my ($matched) = grep $array[$_] =~  /$CLIENT/, 0..$#array) {
            $CLIENT_ = $matched;
        }
    }
    print $array[$Account_Name_],",",$array[$CLIENT_],"\n";
}

close(FILE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM