Perlスクリプト「yakkam.pl」の紹介

一日薬価、および205円以下になる薬剤の組み合わせを探すPerlスクリプトです。動作には、日本語のわかるPerlと薬価データベース(ファイル名はmy_drug.lstがデフォルトです)が必要です。

・DOS/Windowsの場合

  1. まずスクリプトと薬価データベースmy_drug.lstをカレントディレクトリに置きます。
  2. プロンプトから、jperl yakkam.pl と、やります。
  3. 入力待ちになるので、薬剤名 一日量[CR]で入力してゆきます。
  4. 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