0

我需要一些帮助。

我正在尝试创建我从 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];
}

如果有人可以帮助我将它匹配到一个数组中,或者以某种方式它会很棒!我尝试了很多方法,但无法获得完美的结果,如果我发布我尝试的每一次尝试,我实际上会让你感到厌烦。:(

4

2 回答 2

0

类似于以下内容:

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];
    }
}
于 2013-05-06T16:24:30.657 回答
0

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

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

现在您有了一个大哈希,您可以以您喜欢的方式将其转换为 XML。

于 2013-05-06T20:56:10.563 回答