4

美好的一天,伙计们。

我正在尝试从 excel 文件打印到 ini 文件,我已对 excel 和 ini 写入进行了排序,但我的问题在于在不重复的情况下获取值。

excel文件将包含类似这样的内容

    House        |     133_Anderson_str
    Shop         |     12_Smith_Str
    Wheelshop    |     832_Smith_Str
    House        |     21_smith_Str
    Shop         |     1191_dandelion_rd

如果我做一个 foreach 并将其打印到 ini 文件中,我会得到这样的结果

    [House]
    adress=133_Anderson_str

    [Shop]
    adress=12_Smith_Str

    [Wheelshop]
    address=832_Smith_Str

    [House]
    adress=21_smith_Str

    [Shop]
    address=1191_dandelion_rd

这是行不通的,因为如果我运行将搜索房屋下所有地址的 gui,它只会引用第一个地址,然后在新行结束。我想打印每个重复值一次,然后应该像这样打印它之后的下一个值

    [House]
    adress=133_Anderson_str, 21_smith_Str

    [Shop]
    adress=12_Smith_Str, 1191_dandelion_rd


    [Wheelshop]
    address=832_Smith_Str

我尝试了一个 has 表,但我无法以正确的顺序打印并确保每个值都打印到正确的键并且不复制键。

我正在使用 Config::Inifiles 打印和读取 ini 并使用 SpreadSheet::Read 从电子表格中获取数据。

希望有人能给我指点光明!

感谢磨坊。

4

1 回答 1

4

这应该是@input包含 5 行/元素的数组,

House        |     133_Anderson_str
Shop         |     12_Smith_Str
Wheelshop    |     832_Smith_Str
House        |     21_smith_Str
Shop         |     1191_dandelion_rd

首先,%hash用于将元素分组@input为数组结构的哈希,

my %hash;
for my $line (@input) {

  # $k = "House"; $v ="133_Anderson_str", etc.
  my ($k, $v) = split / [\s\|]+ /x, $line;

  my $arr = $hash{$k} ||= [];
  push @$arr, $v;
}

现在分组完成后,继续输出,

for my $k (sort keys %hash) {

  my $arr = $hash{$k};
  my $vals = join ", ", @$arr;

  print "[$k]\n", "address=$vals\n\n";
}
于 2013-05-28T06:54:30.257 回答