私は非常に複雑な問題にぶつかりました (初心者としての私の観点から)、それを解決する方法がわかりません。ワークフローは思いつきますが、スクリプトは思い浮かびません。
次のようなファイル A があります: Teacher (tab) Student1(space)Student2(space)..
Fiona Nicole Sherry
James Alan Nicole
Michelle Crystal
Racheal Bobby Dan Nicole
同じ名前が 2 つある場合 (John1、John2 など)、名前のすぐ横に数字が表示されることがあります。アドバイザーが 2 人以上いる場合は、生徒が重複することもあります。
ファイル B は、教師のグループをまとめたファイルです。見た目は似ていますが、値はカンマで区切られています。
Fiona Racheal,Jack
Michelle Racheal
Racheal Fiona,Michelle
Jack Fiona
ファイル B の傾向は、キーには複数の値があり、各値もキーになり、誰が誰とグループ化されているかを簡単に見つけることができます。
私が望む出力は、教師/グループに基づいて、どの学生が同様の教育を受ける可能性が高いかということです。したがって、スクリプトで次のことを実行したいと思います。
- ファイル A をハッシュに格納して閉じる
ファイル B を開き、各教師を調べて、生徒がいるかどうかを確認します (実際のリストは非常に大きいため、そうでない場合もあります..)。したがって、最初の教師であるフィオナを取り上げると、格納されたファイル A ハッシュ テーブルを調べて、フィオナが存在するかどうかを確認します。存在する場合 (この場合はニコールとシェリー)、それぞれを新しいハッシュ テーブルへの新しいキーとしてポップします。
while (<Group>) { chomp; $data=$_; $data=~/^(\S+)\s+(.*)$/; $TeacherA=$1; $group=$2;
次に、Fiona (Racheal、Jack) とグループ化された教師のグループを見てください。一度に1人ずつ連れていく (Racheal)
if (defined??) { while ($list=~/(\w+)(.*)/) { $TeacherB=$1; $group=$2;
- Racheal の生徒のファイル A を見てください。
- ステップ 2 で作成した生徒キーの値 (カンマ区切り) として入力します。
学生 - 学生および教師 - 教師グループを印刷します。
Nicole Bobby,Dan,Nicole Fiona Racheal Sherry Bobby,Dan,Nicole Fiona Racheal
フィオナのグループの次の教師であるジャックには生徒がいなかったため、この結果には含まれていません。たとえば、彼が David だった場合、結果は次のようになります。
Nicole Bobby,Dan,Nicole Fiona Racheal Sherry Bobby,Dan,Nicole Fiona Racheal Nicole David Fiona Jack Sherry David Fiona Jack
このような複雑で具体的な質問をして申し訳ありません。ひょっとしてこのようなことをしている他の人が答えから恩恵を受けることを願っています。あなたの助けと返信に感謝します。あなたは私の唯一の助けです。