0

我有一个问题。我想我只是累了,因为我的大脑不想再思考了。反正。我从电子表格中收集了多个字符串,每个字符串都有相同的布局,我正在搜索字符串中的特定部分。不过,这是容易的部分。所以字符串看起来像这样。

    this is a string from Japan
    this is a string from China
    this is a string from America
    this is a string from China
    this is a string from England
    this is a string from Japan

这些字符串不是本地的,但我从 excel 表中收集它,所以我打电话来查找最后的每个字符串的位置,在这种情况下,我会像这样使用 viariable。

    use Spreadsheet::Read;
    my $book = ReadData ("INPUT.xlsx");
    my @rows = Spreadsheet::Read::rows ($book->[1]);

    my $count;
    $count = 0;

    my @clause_all;
    foreach my $tab(@rows) {

    $count ++;
    my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
    print $row[5]; # $row[5] would be the location like "japan, china, america etc.
    }

这是我正在努力的部分,循环将 $row[5] 视为一个术语,我现在需要删除重复项,并且需要以某种方式加入每一行的 $row[5] 以获得一个数组然后抛出出重复项。我试过这样做,但由于每个 $row[5] 的单数形式,它不起作用

    my %special = ();
    foreach (@my_array)
            {
    $special{$_} = 1;
            }
    my @deduped = keys %special;
    print "@deduped\n";

但是,如果我像这样创建自己的测试数组,它可以工作,除了它将它们从原始顺序中抛出之外,无论如何,它必须是获取存储在数组中的位置 $row[5] 的问题。

    @my_test_array = ("Japan", "China", "America", "China", "England", "Japan")
    my %special = ();
    foreach (@my_test_array)
            {
    $special{$_} = 1;
            }
    my @deduped = keys %special;
    print "@deduped\n";

提前致谢!

--------------------------------

编辑!

--------------------------------

好吧,这确实有效,但不确定这有多整洁。:)

    use Spreadsheet::Read;
    my $book = ReadData ("NSA_DB.xlsx");
    my @rows = Spreadsheet::Read::rows ($book->[1]);
    my $count;
    $count = 0;
    my @clause_all;
    foreach my $tab(@rows) {
        
        $count ++;
        my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
    push @array, "$row[3]\n";
    }
    my %special = ();
    
     foreach (@array)
        {
         $special{$_} = 1;
          }
            my @deduped = keys %special;
             print "@deduped";
    

再次感谢。

4

1 回答 1

0

这个问题不是很清楚,但是如果您只想将唯一值添加到数组中,以便这些值出现在源电子表格中:

my %added;
my @array;

for (whatever) {
    push @array, $_ unless exists $added{$_};
    $added{$_} = 1;
}

根据原始问题的更新:

use Spreadsheet::Read;

my $book = ReadData ("NSA_DB.xlsx");
my @rows = Spreadsheet::Read::rows ($book->[1]);
my @array;
my %added;

for (my $count = 1; $count <= @rows; $count++) {
    my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
    push @array, $row[3] unless $added{$row[3]};
    $added{$row[3]} = 1;
}

print join("\n", @array), "\n";
于 2013-05-08T11:20:45.957 回答