内容

目的

レコーディングダイエットをしている方用です。
毎回の食事のメニューやカロリーを選択、記入すると、日記に貼り付けやすい形に整形します。
自分用に固定メニューを編集していける形になっていますので、もしお使いになりたい方はご連絡いただけたら専用のスペースを用意させていただきます。

ツールのURL

こちら

使用イメージ

通常の使い方

1.固定メニューに記述されているメニューをチェックし、その右にカロリーを記入。
2.固定メニューにないメニューはテキストボックスに記入し、その右にカロリーを記入。
3.「整形と計算」をクリックする。

固定メニューの変更の仕方

1.固定メニューの右にある「固定メニューから削除」をチェックし、「整形と計算」をクリックすると次回からそのメニューは固定メニューに表示されなくなる。
2.テキストボックスに記入したメニューの右にある「固定メニューに追加」をチェックし、「整形と計算」をクリックすると次回からそのメニューは固定メニューに表示されるようになる。
3.1と2は同時に実行可能。また、カロリーの計算と表示も同時に実施可能。

出力イメージ

<日記用出力>

☆ごはん 140kcal
☆サラダ 
☆かぼちゃサラダ 57kcal
☆漬物 
☆ほうれん草の胡麻和え 53kcal
☆ヨーグルト 52kcal
☆ささみの海苔マヨがけ 74kcal
合計 376kcal

※カロリーを記述しなかったメニューは、メニュー名のみ表示。

ソースイメージ

#!/usr/bin/perl
#
$INDEX_START=1000;

sub ini{
    $index=0;
    open(MENU,"./gohan_menu.txt");
    while(<MENU>){
#       chomp($_);
#       $each_menu=$_;
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
#       print "$index=$each_menu<br>";
        $tags{$menu_ind}=""; #global
        $tags{$calorie_ind}=""; #global
        $index_max_1=$index; #global
        $index++;
    }
    close(MENU);
    $index=$INDEX_START;
    for(1..10){
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
#       print "$index<br>";
        $tags{$menu_ind}=""; #global
        $tags{$calorie_ind}=""; #global
        $index_max_2=$index; #global
        $index++;
    }
}
sub decode {
    local($args, $n_read, *terms, $tag, $value);

    $ENV{'REQUEST_METHOD'} eq "POST" ?
    ($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
    ($args = $ENV{'QUERY_STRING'});

    @terms = split('&', $args);

    foreach (@terms) {
        ($tag, $value) = split(/=/, $_, 2);
        $value =~ s/\+/ /g;
        $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
        $tags{$tag} = $value;       # tags is global
    }
}
sub menu_add{
    open(TMP,">./gohan_menu_tmp.txt");
    open(MENU,"./gohan_menu.txt");
    my $index=0;
    while(<MENU>){
        chomp($_);
#       print "$_<br>";
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
        my $add_ind = "add" . $index;
#       print "$tags{$menu_ind} $tags{$calorie_ind} $tags{$add_ind}<br>";
        if($tags{$add_ind} eq "off"){
            print "<font color=\"red\">「$_」を固定メニューから削除しました。</font><br>\n";
        }else{
            print TMP "$_\n";
        }
        $index++;
    }
    close(MENU);
    close(TMP);
    open(TMP,"./gohan_menu_tmp.txt");
    open(MENU,">./gohan_menu.txt");
    while(<TMP>){
        print MENU $_;
    }
    close(MENU);
    close(TMP);
    open (MENU,">>./gohan_menu.txt");
    for ( $index=$INDEX_START; $index<=$index_max_2; $index++ ){
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
        my $add_ind = "add" . $index;
#       print "$tags{$menu_ind} $tags{$calorie_ind} $tags{$add_ind}<br>";
        if($tags{$add_ind} eq "on" && $tags{$menu_ind} ne ""){
            print MENU "$tags{$menu_ind}\n";
            print "<font color=\"blue\">「$tags{$menu_ind}」を固定メニューに追加しました。</font><br>\n";
        }
    }
    close(MENU);
}
sub print_line{
        my $index=$_[0];
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
        if($tags{$menu_ind} ne ""){
            print "☆$tags{$menu_ind} $tags{$calorie_ind}";
            if($tags{$calorie_ind} ne ""){
                print "kcal";
                $sum = $sum + $tags{$calorie_ind};
            }
            print "<br>\n";
        }
}
sub print_result {
    $sum=0; #global
    my $index=0;
    print "<日記用出力><br><br>";
    for ( $index=0; $index<=$index_max_1; $index++ ){
            &print_line("$index");
    }
    for ( $index=$INDEX_START; $index<=$index_max_2; $index++ ){
            &print_line("$index");
    }
    print "合計 ${sum}kcal";
}
sub print_menu{
    my $index = 0;
    my $table_index=0;
    my $menu_ind="";
    my $calorie_ind="";
    #固定メニュー
    open(MENU,"./gohan_menu.txt");
    while(<MENU>){
        chomp($_);
        $each_menu=$_;
        my $add_ind = "add" . $index;
        if($tags{$add_ind} eq "off"){
            $index++;
        }
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
        print "<tr>\n";
        print "<td><input type=\"checkbox\" name=\"$menu_ind\" value=\"$each_menu\"";
        if($tags{$menu_ind} ne ""){
            print "checked";
        }
        print ">$each_menu</td>\n";
        print "<td><input type=\"text\" name=\"$calorie_ind\" size=\"5\" maxlength=\"5\"";
        if($tags{$calorie_ind} ne ""){
            print "value=\"$tags{$calorie_ind}\"";
        }
        print ">kcal</td>\n";
        print "<td>     <input type=\"checkbox\" name=\"$add_ind\" value=\"off\">固定メニューから削除</td>\n";
        if($table_index ==0){
            my $line_num = $index_max_1 + 1 + $index_max_2 - $INDEX_START + 1;
            print "<td rowspan=\"";
            print "$line_num";
            print "\" width=\"60px\"></td>";
            print "<td rowspan=\"";
            print "$line_num";
            print "\" VALIGN=\"top\">";
            if ($ENV{'REQUEST_METHOD'} eq "POST"){
                &print_result();
            }
            print "</td>";
        }
        print "</tr>\n";
        $index++;
        $table_index++;
    }
    close(MENU);
    #記述するメニュー
    $index=$INDEX_START;
    for(1..10){
        my $menu_ind = "menu" . $index;
        my $calorie_ind = "calorie" . $index;
        my $add_ind = "add" . $index;
        print "<tr>\n";
        print "<td><input type=\"text\" name=\"$menu_ind\" size=\"30\" maxlength=\"40\"";
        if($tags{$menu_ind} ne ""){
            print "value=\"$tags{$menu_ind}\"";
        }
        print "></td>\n";
        print "<td><input type=\"text\" name=\"$calorie_ind\" size=\"5\" maxlength=\"5\"";
        if($tags{$calorie_ind} ne ""){
            print "value=\"$tags{$calorie_ind}\"";
        }
        print ">kcal</td>\n";
        print "<td>     <input type=\"checkbox\" name=\"$add_ind\" value=\"on\">固定メニューに追加</td>\n";
        print "</tr>\n";
        $index++;
    }
    print "</table>\n";
    print "<p><input type=\"submit\" value=\"整形と計算\" name=\"submit\"></p>\n";
}

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
print "<TITLE>ごはんツール</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<form method=\"POST\" action=\"./gohan.cgi\">";
print "<p><font size=\"4\">■ごはんツール</font></p>";
print "<p>メニューをチェック(or 記述)し、それぞれにカロリーを記入後「整形と計算」をクリックしてください。</p>";
print "<table border=\"0\" bordercolor=\"white\" cellspacing=\"0\">\n";
&ini();
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    &decode();
    &menu_add();
}
&print_menu();

print "<br>\n";
print "<font size=\"1\">動作に不具合等ありましたらご連絡ください。早急に対応したいと思います。(2008年11月17日<a href=\"http://hinata.la.coocan.jp/pukiwiki/?FrontPage\" target=\"blank\">日向充</a>)</font>";
print "<br><br>\n";
print "<script type=\"text/javascript\"><!--\n";
print "amazon_ad_tag = \"hinatamitsuru-22\"; amazon_ad_width = \"728\";  amazon_ad_height = \"90\";//--></script>\n";
print "<script type=\"text/javascript\" src=\"http://www.assoc-amazon.jp/s/ads.js\"></script>\n";
print "<iframe src=\"http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=20&l=qs1&f=ifr\"\n";
print "width=\"120\" height=\"90\" frameborder=\"0\" scrolling=\"no\"></iframe>";
print "</BODY>\n";
print "</HTML>\n";

改版履歴

081122(初版)

初版作成。

バグ管理簿




添付ファイル: filegohan_081122.cgi.txt 159件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-12-10 (土) 00:21:26 (2870d)