Arrays 匹配,如果已经存在,则不执行任何操作

Arrays 匹配,如果已经存在,则不执行任何操作,arrays,perl,excel,spreadsheet,Arrays,Perl,Excel,Spreadsheet,请再帮我一次忙 我正在尝试创建一个从Excel电子表格调用的项目列表。 假设A列包含一个国家列表 America South Africa Belgium America 现在,在相应的行中有附加到国家的其他项目,但在D列中,因此在其他列中可能有更多的项目与第一个单元格中的国家相对应,如下所示 ______________A__________________________B___________________C___________ ---------------|----------

请再帮我一次忙

我正在尝试创建一个从Excel电子表格调用的项目列表。 假设A列包含一个国家列表

America
South Africa
Belgium
America
现在,在相应的行中有附加到国家的其他项目,但在D列中,因此在其他列中可能有更多的项目与第一个单元格中的国家相对应,如下所示

______________A__________________________B___________________C___________

---------------|----------------|-------------|

America........|..Samsung.......|...1234......|

South Africa...|..Dell..........|...54321.....|

Belgium........|..iPhone........|...2345......|

America........|..Nokia.........|...9876......|
我想将其发布到XML工作表中,但我不想多次创建每个国家,因此我想检查该行的条目,如果该行不存在,则创建它。所以在上表中,我有两次America,但它只需要创建一次America作为XML条目,然后我将附加其他项目

现在,我通过计算工作表中的行来获取行数据,因为每次都不同,然后我需要开始编写XML

use Spreadsheet::Read;

#use XML::Writer

my $book = ReadData("InfoDB.xlsx");

my @rows = Spreadsheet::Read::rows($book->[1]);

my $count = 1;

my @clause_all;

foreach $tab (@rows) {
    $count++;
    @row = Spreadsheet::Read::cellrow($book->[1], $count);
    @country = $row[1];
}
如果有人能帮我把它匹配成一个数组,那就太好了!
我尝试了很多方法,但都不能得到完美的结果,如果我把每次尝试的结果都贴出来,我会让你感到厌烦(

大致如下:

my @country;
foreach my $tab (@rows) {
    ...

    # The smart match operator (~~) will return true if the value on the
    # left is found in the list on the right.
    unless ($row[1] ~~ @country) {
        # do the things you need to do then add the country to the list
        push @country, $row[1];
    }
}

创建哈希,使用国家名称作为关键字: 然后将新数据推送到存储在该键上的数组引用上-这是psuedocode。您需要在电子表格中添加疯狂才能使其正常工作

%countries = ();
foreach my $row ( @rows) {
  my ($country, $thing, $number) = row2columns($row);
  push @{ $countries{$country} }, [ $thing, $number ];
}

现在你有了一个大的散列,你可以用你喜欢的方式转换成XML。

如果你只是简单地将整个内容导出为XML并从那里进行处理,这会更容易。好东西,我会尝试一下。非常感谢!感谢一个磨坊,一定会尝试的,这对我来说很有意义。谢谢!