Perlスクリプト「yakkam.pl」の紹介
一日薬価、および205円以下になる薬剤の組み合わせを探すPerlスクリプトです。動作には、日本語のわかるPerlと薬価データベース(ファイル名はmy_drug.lstがデフォルトです)が必要です。
・DOS/Windowsの場合
- まずスクリプトと薬価データベースmy_drug.lstをカレントディレクトリに置きます。
- プロンプトから、jperl yakkam.pl と、やります。
- 入力待ちになるので、薬剤名 一日量[CR]で入力してゆきます。
- CTRL+Z[CR]で、入力終了です。結果が出力されます。
入力文字種は、カタカナは全角のみ、数字と括弧とアルファベットは全角・半角・両者の混在いずれもOKです(ただしアルファベットの大文字小文字は区別します)。もちろん、リダイレクトも使えます。
・UNIXの場合
私が説明するまでもないでしょう(釈迦に説法)。
・MacOSの場合
私はMacPerlを使ったことがありません。情報をお待ちしております。
----------^ YAKKAM.PL ( date:97-05-17 time:12:00 ) ---------< cut here
#!/usr/local/bin/perl
open(YAKKALIST, "my_drug.lst");
while(){
chop;
($na e,$kingaku) = split;
$yakka{$name} = $kingaku;
}
close(YAKKALIST);
printf("薬剤名と一日量を入力してください。終了は CTRL+Z です。\n");
while(<>){
chop;
tr/ ()0123456789a-zA-Z/ ()0123456789a-zA-Z/;
($namae,$kaisu) = split;
$druglist{$namae} = $kaisu;
}
foreach $key (keys %druglist){
$yakka_day{$key} = $yakka{$key} * $druglist{$key};
}
@sorted = sort by_yakka keys(%druglist);
#@sorted = reverse(@sorted);
sub by_yakka{
$yakka_day{$a} <=> $yakka_day{$b};
} printf("\n");
printf("一日の薬価は以下の通りです。\n");
printf("\n");
foreach (@sorted){
$total += $yakka_day{$_};
printf("%24s %4s %6.2f -------- total %6.2f\n",$_,$druglist{$_},$yakka_day{$_},$total);
}
printf("\n");
printf(" ---------------- total %6.2f ----------------\n",$total);
printf("\n");
printf("205円未満となる薬剤の組み合わせは、以下の通りです。\n");
printf("\n");
$list_len = @sorted;
while($list_len != 0){
$x = pop(@sorted);
$gokei = $yakka_day{$x};
printf("%24s %4s %6.2f -------- total %6.2f\n",$x,$druglist{$x},
$yakka_day{$x},$gokei);
$poped_len = @sorted;
while($poped_len != 0){
$y = pop(@sorted);
$gokei += $yakka_day{$y};
if($gokei >= 205){
$gokei -= $yakka_day{$y};
unshift(@stack,$y);
}else{
printf("%24s %4s %6.2f -------- total %6.2f\n",$y,
$druglist{$y},$yakka_day{$y},$gokei);
}
$poped_len --;
}
printf(" ---------------- total %6.2f ----------------\n",$gokei);
printf("\n");
@sorted = @stack;
@stack = ();
$list_len = @sorted;
}
printf("\n");
printf(" ---------------- total %6.2f ----------------\n",$total);
printf("\n");
----------$ YAKKAM.PL ( lines:65 ) -------------------------< cut here