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 に答える