List of class taught by takasu thermodynamics perl code to organize meibo by takasu

名簿整形用perlスクリプト: meibo.pl

            by 高須    98.1.11   ホームページ

1。このスクリプトの目的

某同窓会MLの名簿は、普段はFile Maker Proで管理してます。 MLに流すリストを出力するスクリプトです。

2。準備

・元のFile Maker Proの名簿から、データを読み出します。

読みだしファイル名はmeibo1にしておきます。

「タブ区切りテキスト」を選択。 データ順は、以下の通り。

  名字、旧姓、名前、卒業年、学部、学科、学年(在学生のみ)、
  仕事、会員(yes/no), 在学(zaigaku/og), 会員番号(会員のみ),
  e-mailその1、e-mailその2(2つアドレスがある人のみ)。

3。実行

以下のソースをテキストモードで例えば、 meibo.pl というファイルにセーブします。

meibo.plはEUCにしておきます。(日本語をプログラム内に書いているため)。

      chmod +x meibo.pl
によって、実行可能にします。 名簿の元データmeibo1と同じディレクトリに入れます。
     meibo.pl 
により、出力はファイルoutallに出ます。

入力ファイルはパソコン出力のままのSJISでかまいません。 出力ファイルoutallはJISで出てきます。


4。本文

#!/usr/bin/perl
#   meibo.pl               by M. Takasu,  Jan 6, 1998
#   dousoukai ML meibo
#   input comes from filemaker pro with tab division.
#   sort the meibo and output to list
#
&initialize;
 
$i=0;
while (<inputfile>){
    &get_file;
    &prepare_forml;
    $i++;
}
&sort_meibo;
&close_all;

############################ end of main code ###########################
#---------------------------------------------
# start of subroutine
#--------------------------------------------
sub initialize{
 
  $file_input = "meibo1";

  $line_begin="○○会ML名簿 \n\n";
  $line_og   ="(1)○○会会員\n";
  $line_gakusei="\n\n(2)学生非会員\n\n";

  $line_end="---------------------------------------------------------------------\n";
#--------------- don't change below unless necessary-------------

  system("cat $file_input |nkf -e > in1");

  open(LIST1, ">out1")||die "can not open file \n";
  open(LIST2, ">out2")||die "can not open file \n";
  open(LIST3, ">out3")||die "can not open file \n";
  open(inputfile, "in1") || die "can not open file \n";
 
  print LIST1 $line_begin, $line_og;
  print LIST3 $line_gakusei;
}
#--------------------------------------------
sub close_all{

print LIST2 $line_end;
print LIST3 $line_end;
print LIST3 "以上\n";

close(LIST1);
close(LIST2);
close(LIST3);

system("cat out1 out2 out3 |nkf -j > outall");   
system("rm out1 out2 out3 in1");
}
#---------------------------------------------------
sub sort_meibo{

@sorted = sort by_sotsugyou keys %sotsugyou;
  foreach $i(@sorted){
      &print_forml;    
  }
} 

#--------------------------------------------
sub by_sotsugyou{
   ($sotsugyou{$a} <=> $sotsugyou{$b}) ||
   ($gakunen2{$b} <=> $gakunen2{$a}) ||
   ($gakubu{$a} cmp $gakubu{$b})     ||
   ($gakka{$a} <=> $gakka{$b});
}

#--------------------------------------------
sub print_forml{

   if($sotsugyou{$i} ne ''){
       write LIST1;
   }
   elsif($zaigaku{$i} eq 'zaigaku' && $kaiin{$i} eq 'yes'){
        write LIST2;
   }
   elsif($zaigaku{$i} eq 'zaigaku' && $kaiin{$i} eq 'no'){
        write LIST3;
   }  
   else{
      print " didnot output this";
      print $shimei{$i};
   }  
}
#--------------------------------------------
sub prepare_forml{
   &prepare_namae;
   &prepare_gakubu;
   &prepare_gakunen;
   &prepare_address;
   &prepare_item;
}
#--------------------------------
sub prepare_namae{
   if($kyuusei{$i} eq ''){
      $shimei{$i} = "$myouji{$i} $namae{$i}";
   }
   else{
      $shimei{$i} = "$myouji{$i} $kyuusei{$i} $namae{$i}";
   }
}
#--------------------------------------------
sub prepare_address{

   $add{$i} = $address{$i};
   if($address2{$i} ne  ''){
      $add{$i} = "$add{$i}  $address2{$i}";
   }
}
#--------------------------------------------
sub prepare_gakubu{

   $item{$i} = $gakubu{$i};

   if($gakka{$i} ne ''){
     $item{$i} = "$item{$i} $gakka{$i}";
   }
   if($gakunen{$i} ne ''){
     $item{$i} = "$item{$i} $gakunen{$i}";
   }
}
#--------------------------------------------
sub prepare_gakunen{       #        for sorting
   $gakunen2{$i} =  $gakunen{$i};
   if($gakunen2{$i} =~ /B/ ){
      $gakunen2{$i} =~ s/B// ;
   }
   elsif($gakunen2{$i} =~ /M/ ){
      $gakunen2{$i} =~ s/M1/5/;
      $gakunen2{$i} =~ s/M2/6/;
   }
   elsif($gakunen2{$i} =~ /D/ ){      
      $gakunen2{$i} =~ s/D1/7/;
      $gakunen2{$i} =~ s/D2/8/;
      $gakunen2{$i} =~ s/D3/9/;
   }
}
#--------------------------------------------
sub prepare_item{

   if($sotsugyou{$i} =~ /19/){
      $sotsugyou{$i} =~ s/19//;
   }

   if($sotsugyou{$i} ne ''){
      $item{$i} = "$sotsugyou{$i} $item{$i}";
   }
}
#----------------------------------------
sub get_file{

    $input = $_;    

    ($myouji{$i}, $kyuusei{$i}, $namae{$i}, $sotsugyou{$i}, 
     $gakubu{$i}, $gakka{$i}, $gakunen{$i}, $shigoto{$i}, 
     $kaiin{$i}, $zaigaku{$i}, $bangou{$i}, $address{$i}, $address2{$i}) = 
     split(/\t/, $input);

     if($address2{$i} =~ /\n/){
        chop($address2{$i});
     }
}
#--------------------------------------------
format LIST1 =
---------------------------------------------------------------------
@<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  
$shimei{$i}, $item{$i}, $shigoto{$i}
         @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$add{$i}
.

format LIST2 =
---------------------------------------------------------------------
@<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<  
$shimei{$i}, $item{$i}
         @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$add{$i}
.
 
format LIST3 =
@<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
$shimei{$i}, $item{$i}, $add{$i}
.