1

私はプログラミングが初めてで、多くの助けが必要です。私は2つのファイルを持っています:

最初のものは、いくつかの ID (実際にはリスト) を持つ列を報告し、次のようになります。

ID_3
ID_6
ID_5-2
ID_38

2 番目のファイルは、複数の列を含むテーブルを報告し、次のようになります。

name1 ID_1 ID_1-2
name2 ID_2 ID_2-2
name3 ID_3 ID_3-2 ID_3-3
name4 ID_4
name5 ID_5 ID_5-2
name6 ID_6

私の目的は、最初のファイルの各 ID を 2 番目のファイルで報告された ID と比較することです。一致する場合は、それぞれの名前を出力したい (たとえば、ファイル 1 の *ID_3*の場合、出力にname3を出力したい)、一致しない場合は、ファイル 1 から一致しない ID を出力したい qith "見つかりません"。たとえば、*ID_38* (ファイル 2 に一致するものがありません) の場合、*ID_38 not-found* と出力したいと思います。

一致する ID に対応する名前を正しく書き込むことができる perl スクリプトを作成しましたが、一致しない ID を適切に書き込むことができません。コードは次のようになります。

$file_table = "file_2.txt";
$file_list = "file1.txt";
open (HAN, "< $file_table") || die "Impossible open the table";
@r = <HAN>;
close (HAN);
open (PEW, "< $file_list") || die "Impossible open the list";
@l = <PEW>;
close (PEW);
for ($p=0; $p<=$#l; $p++) {
   chomp ($l[$p]);
   for ($i=0; $i<=$#r; $i++) {
     chomp ($r[$i]);
     @v = split (/ /, $r[$i]);
     for ($j=0; $j<=$#v; $j++) {
       chomp ($v[$j]);
       if ($l[$p] eq $v[$j]) {
         print "$v[0]\n";
       } else {
         print "$l[$p] not-found\n";
       }
     }
   }
}

出力に「見つからない」行が多すぎて間違っていて、解決方法がわかりません。次のような出力が必要です。

name3
name6
name5
ID_38
4

1 に答える 1