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