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}
.