by 高須 98.1.11 → ホームページ
読みだしファイル名はmeibo1にしておきます。
「タブ区切りテキスト」を選択。 データ順は、以下の通り。
名字、旧姓、名前、卒業年、学部、学科、学年(在学生のみ)、 仕事、会員(yes/no), 在学(zaigaku/og), 会員番号(会員のみ), e-mailその1、e-mailその2(2つアドレスがある人のみ)。
以下のソースをテキストモードで例えば、 meibo.pl というファイルにセーブします。
meibo.plはEUCにしておきます。(日本語をプログラム内に書いているため)。
chmod +x meibo.plによって、実行可能にします。 名簿の元データmeibo1と同じディレクトリに入れます。
meibo.plにより、出力はファイルoutallに出ます。
入力ファイルはパソコン出力のままのSJISでかまいません。 出力ファイルoutallはJISで出てきます。
#!/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} .