Arrays 匹配,如果已经存在,则不执行任何操作
请再帮我一次忙 我正在尝试创建一个从Excel电子表格调用的项目列表。 假设A列包含一个国家列表Arrays 匹配,如果已经存在,则不执行任何操作,arrays,perl,excel,spreadsheet,Arrays,Perl,Excel,Spreadsheet,请再帮我一次忙 我正在尝试创建一个从Excel电子表格调用的项目列表。 假设A列包含一个国家列表 America South Africa Belgium America 现在,在相应的行中有附加到国家的其他项目,但在D列中,因此在其他列中可能有更多的项目与第一个单元格中的国家相对应,如下所示 ______________A__________________________B___________________C___________ ---------------|----------
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并从那里进行处理,这会更容易。好东西,我会尝试一下。非常感谢!感谢一个磨坊,一定会尝试的,这对我来说很有意义。谢谢!