# travel_01.pl
# 修学旅行アンケートの集計
  
   open R, "旅行-01.txt" ;
   open W, ">旅行集計結果.txt" ;
  
# データの読み込み(列型)
   for (<R>)
      {
       @row = split " ", $' if /:/ ;  # ← @
       $i = -1 ;
       for (@row) {$clm[++$i] .= "$_ "}
       ++$nx
      }
  
# 各選択肢の個数
   for $i (0..4)
  {
   @Q = split " ", $clm[$i] ;
  
   $q1[$i] = grep /1/, @Q ; $q2[$i] = grep /2/, @Q ; $q3[$i] = grep /3/, @Q ;  # ← A
   $q4[$i] = grep /4/, @Q ; $q5[$i] = grep /5/, @Q ; $q6[$i] = grep /6/, @Q ;
  }
  
# 結果の出力
   print W <<EOF ;
  
   修学旅行アンケート集計結果
                                                                 計 $nx 名分
  
  【1】行きたい方面
       1.北海道 ($q1[0])  2.東北地方 ($q2[0])  3.京都・奈良 ($q3[0])  4.萩・津和野 ($q4[0])
       5.九州 ($q5[0])  6.沖縄 ($q6[0])
  
   【2】宿泊の形態
       1.ホテル ($q1[1])  2.旅館 ($q2[1])
  
   【3】好きな食事
       1.和食 ($q1[2])  2.洋食 ($q2[2])  3.中華 ($q3[2])  4.郷土料理 ($q4[2])
  
   【4】主な内容
       1.名所見学 ($q1[3])  2.体験学習 ($q2[3])  3.地域交流 ($q3[3])
  
   【5】行きたい時期
       1.4〜6月 ($q1[4])  2.9〜10月 ($q2[4])  3.11月 ($q3[4])  4.1〜2月 ($q4[4])
EOF

# 旅行-01.txt 1101:4 1 3 2 3 1102:2 1 3 2 3 1103:1 1 2 2 3 1104:1 1 2 2 3 1105:1 1 2 2 2 1201:6 2 4 1 2 1202:5 2 2 1 3 1203:6 2 2 3 3 1204:3 1 1 2 1 1205:1 1 1 2 3
# 旅行集計結果.txt   修学旅行アンケート集計結果                                  計 10 名分 【1】行きたい方面    1.北海道 (4) 2.東北地方 (1) 3.京都・奈良 (1) 4.萩・津和野 (1)  5.九州 (1) 6.沖縄 (2) 【2】宿泊の形態   1.ホテル (7) 2.旅館 (3) 【3】好きな食事   1.和食 (2) 2.洋食 (5) 3.中華 (2) 4.郷土料理 (1) 【4】主な内容   1.名所見学 (2) 2.体験学習 (7) 3.地域交流 (1) 【5】行きたい時期   1.4〜6月 (1) 2.9〜10月 (2) 3.11月 (7) 4.1〜2月 (0)

# キーワード検索のサブルーチン
  
$key = "ya" ;
&keyword ;
print "\n $num $name を表示します。" ;
  
sub keyword
{
open F, "生徒氏名.txt" ;
for (<F>)
    {
     if (/$key/i)
    {
     /(^.+? .+?) / ;
     push @match, $1 ;
     print " ", ++$k, ". $1 \n"
    }}
     if ($k > 0)
       {
        print "\n 何番:" ;
        $nn = <STDIN> ;
        ($num, $name) = split " ", $match[$nn-1] ;
       }
     else {print " 該当者なし \n"}
}
  

# 設問番号のハッシュ表
  
open F, "修学旅行設問文.txt" ;
for (<F>)
    {push @menu, split}
@menu = splice @menu, 4 ;
  
$n = -1 ;
for (10..16, 20..22, 30..34, 40..43, 50..54)  
    {
     $Q{$_} = $menu[++$n] ;
     print " 選択肢 $n:$Q{$_} \n"
    }
  

# travel_02.pl
# 個人情報の表示
  
# 設問文のハッシュ表
   open F, "修学旅行設問文.txt" ;
   for (<F>)
      {push @menu, split}
   @menu = splice @menu, 4 ;
   $n = -1 ;
   for (10..16, 20..22, 30..34, 40..43, 50..54)  
      {$Q{$_} = $menu[++$n]}
  
   while(1)
  {
# 検索者入力
   print "\n 番号/キーワード(Enter:終了):" ;
   $key = <STDIN> ;
   last if $key eq "\n" ;
   chomp $key ;
   &keyword ;
  
# 該当者データの読み込み
   open F, "旅行-01.txt" ;
   for (<F>)
     {
      if (/$num:/)
        {@A = split " ", $' ; last}
     }
  
# 結果の出力
   print <<EOF ;
  
  ** $num  $name **
  
【1】行きたい方面 : $Q{$A[0]+10}
  
【2】宿泊の形態   : $Q{$A[1]+20}
  
【3】好きな食事   : $Q{$A[2]+30}
  
【4】主な内容     : $Q{$A[3]+40}
  
【5】行きたい時期 : $Q{$A[4]+50}
EOF
  }
print "\n おつかれさま..\(^o^)/\n" ;
  

# キーワード検索のサブルーチン
  sub keyword
{
  open F, "生徒氏名.txt" ;
  print "\n" ;
  undef $k, undef @match ;
  for (<F>)
     {
      if (/$key/i)
     {
      /(^.+? .+?) / ;
      push @match, $1 ;
      print " ", ++$k, ". $1 \n"
     }}
      if ($k > 0)
        {
         print "\n 何番(Enter:1番):" ;
         $nn = <STDIN> ;
         $nn = 1 if $nn eq "\n" ;
         ($num, $name) = split " ", $match[$nn-1] ;
        }
      else {print " 該当者なし \n" ; redo}
}