まず、データをPerlに取り込みましょう。ファイルを開き、最初の空白で分割されたハッシュに読み込みます。プログラムに違いがないため、、、、またはを別々のデータa
に分割する必要はありません。b
c
d
use strict;
use warnings;
use autodie;
open INPUT, "<", "TEST.txt";
my %array;
while my $line (<INPUT>) {
chomp $line;
my ($key, $data) = split /\s+/, $line, 2;
$array{$key} = $value;
}
これにより、次のようになります。
$array{car} = "1 2 0 7";
$array{tram} = "7 8 9 5";
$array{bus_db} = "1 6 3 8";
$array{cari} = "";
$array{busi_db} = "";
さて、あなたが説明していないことがあります:null配列メンバーが非null配列メンバーと一致するかどうかをどうやって知るのですか。cari
それが一致 car
していることをどうやって知ることができbusi_db
ます bus_db
か?それはi
最後に追加されていますが、可能なdb
接尾辞の前ですか?私たちが知っておくべき他のことはありますか?
あなたがそれを理解したら、それらを一致させることは非常に簡単です:
$array{busi_db} = $array{bus_db};
次に、それらを印刷するだけです。
# Go through array and make "null" members match
while my $key (sort keys %array) {
if (not $array{$key}) { #Ah! a null array member!
$matching_key = find_matching_key($key);
$array{$key} = $array{$matching_key};
}
}
# Print them out
while my $key (sort keys %array) {
print "$key = $array{$key}\n";
}
sub find_matching_key {
# Here be dragons....
}
問題はそのfind_matching_key
サブルーチンです。2つの別々のキーが一致する理由を理解し、詳細を入力します。
ちなみに、サンプルデータによると、nullメンバーはnull以外のメンバーの後に来ます。これが常に真の条件である場合、読み取りループをマージループから分離する必要はありません。残念ながら、あなたはこれが本当かどうかを言いませんでした。
また、配列を読み込まれたのと同じ順序で出力する必要があるかどうかを指定しませんでした。キーのリストを保持し、それらを順番に保持することもできました。ロジックが複雑になるので、指定しませんでした。
あなたの質問のランクが低く、人々がそれを締めくくりとしてマークしているという事実に注意してください。これは、基本的に「この問題があります。解決してください」と言ったためです。また、解決策についても十分な詳細を提供していませんでした。私が言ったように、あなたは一致するキーについて話しましたが、あなたが何を意味するのかを特定しませんでした。