perlで自動採番機能を付けたプログラムの導入について

このQ&Aのポイント
  • perlを使用して自動採番機能を実装する方法について教えてください。具体的には、html内のフォームから入力した値を受け取り、選択結果に基づいて自動で番号を付けたテキストファイルを作成する方法について知りたいです。
  • 具体的な要件としては、htmlフォーム内で選択した項目に対して番号を付け、その番号をテキストファイルに自動で入力する必要があります。また、テキストファイルの作成は、既存のファイルが存在しない場合に行い、カンマ区切りでデータを自動入力するようにしたいです。
  • このような自動採番機能を実装するためには、Perlを使用してフォームの値を受け取り、選択結果に基づいて番号を付けるプログラムを作成する必要があります。また、テキストファイルにデータを自動入力するためには、既存のファイルがあるかどうかを判定し、存在しない場合には新規作成するプログラムも必要です。
回答を見る
  • ベストアンサー

perlで自動採番

はじめまして。 perlにて自動採番機能を付けたプログラムの導入について質問です。 私の行おうとしている事は以下のとおりです。 (1)html内に<form>タグで囲まれた部分を選択(または入力)して登録ボタンを押す。 <html> 題名:○○登録 <form method="POST" action="cgi-bin/○○.cgi"> 日付  選択   個数  登録者  備考 登録日 A:みかん 1~100 任意入力 任意入力 B:りんご までを選択 <登録ボタン> </form> </html> (2)選択結果を以下のように返す。 (例1)選択内容 2004/10/13 A:みかん 1 ごんべい TEST入力 (例1)の出力結果 ごんべいさんは、A04-001番を使用します。備考はTEST入力です。 (例2) 2004/10/13 B:りんご 100ごんべい TEST入力 (例2)の出力結果 ごんべいさんは、B04-001番~B04-101番を使用します。備考はTEST入力です。 (3)((2)番)で登録した値をテキストファイルへ出力、保存する。 (例1)の場合 プログラム処理後、値を指定したディレクトリ内にあるみかん.txtファイルへ カンマ区切りで自動入力。しかし、みかん.txtが存在しなかった場合、 新規にみかん.txtファイルを作成し、自動入力。 ・入力内容 2004/10/13;みかん;0001;ごんべい;TEST入力; (例3)の場合 (例1)と同じ条件(連番とファイル名の違いのみ) ・入力内容 2004/10/13;りんご;0001;ごんべい;TEST入力; ...番号順 2004/10/13;りんご;0101;ごんべい;TEST入力; クライアントはみかん・りんごがどれだけほしいかを選択し、登録ボタンを押す。サーバーではクライアントに入力した値を返す。その際に、値を識別し、みかん・りんごの対象となるテキストファイルに自動入力する。しかし、対象ファイルが存在しない場合、自動でファイルを作成し、そこに自動入力する。 何かいい方法がありましたらご教授お願いします。

  • Perl
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • TNY
  • ベストアンサー率42% (69/163)
回答No.3

こんにちは。ざっと確認した程度なのですが、セミコロン区切りであれば @temp = split(/,/,$last_data); の行は @temp = split(/;/,$last_data); になり、 $add_data = "$in{'a_day'},$in{'sentaku'},$new_value,$in{'name'},$in{'biko'}\n"; の行も $add_data = "$in{'a_day'};$in{'sentaku'};$new_value;$in{'name'};$in{'biko'}\n"; のようにセミコロンに変える必要があると思います。 (一般的なカンマ区切りを想定していましたので) また、りんご、みかん、もも、程度でしたらif~elsif~elseでもいいですが、もし種類が増えるようであれば、処理部分は共通にして、対象のtxtファイルだけ選択肢別に変えてやるようにするとソースがすっきりしますね。 他、特に気づいた点はありませんでした。

perl_beginner
質問者

お礼

TNYさん。 確認有難うございます。 私は、まだperlを勉強し始めてから間もないのですが、わけのわからない質問にも親切に回答していただき本当に感謝しています。 お礼の次にまたまた質問なのですが、TNYさんが書いてくれた処理部分を共通にするってどのような式なのでしょうか? 実際のperlを記述する際には、8~10種類の選択があり、今後も増える可能性があるものですので、ぜひ教えていただきたいのです。他のサイトで調べると色々ごちゃごちゃになってしまい、収集がつかなくなってしまうのです。 また、CSVに吐き出す式も存在すると話を伺ったのですが、それも可能なのでしょうか? 大変申し訳ありませんが、またまた参考意見を聞かせてください。 宜しくお願いします。

その他の回答 (2)

  • TNY
  • ベストアンサー率42% (69/163)
回答No.2

やることとしては以下のようなことだと思います。 ・該当の種類(Aみかん/Bりんご)のtxtファイルをオープン ・データを読み出し、最後の行の3列目(番号部分)を取り出す ・取り出した値と、新たに選択された個数を加算 ・入力内容&加算した値のデータ列を行の最後に追加 その場合、ソースのメイン部分は以下のようになると思います。($IN{'...'}はフォームの取得部分) #データを読み出し(該当txtは判別済みとする) open FILE,"りんご.txt"; @data = <FILE>; close FILE; #最後の行の番号部分を抜き出して、それにフォームで選択された個数を加算 $last_data = pop @data; @temp = split(/,/,$last_data); $new_value = $temp[2] + $in{'個数'}; $add_data = "$in{'日付'},$in{'種類'},$new_value,$in{'名前'},$in{'備考'}\n"; #追記形式でデータを保存 open FILE,">>りんご.txt"; print FILE $add_data; close FILE; 見当違いでしたらすみません。 ご参考になれば幸いです。

perl_beginner
質問者

補足

TNYさん。 お礼が遅れて大変申し訳ありません。 全然検討違いではありません。有難うございます。 さらに質問なのですが、 TNYさんから教えて頂いたソースを見て他サイトなどで試行錯誤して サンプルを作ってみたのですが、 この記述でよろしいのでしょうか? 大変面倒かとは思いますが、確認をして頂けないでしょうか? 申し訳ありませんが、宜しくお願い致します。 再度やりたいことは ・クライアント側  必要項目を選択&入力するだけで欲しい数が一目でわかる。(00番~00番) ・サーバー側  クライアントに送信したデータを指定のテキストファイルにセミコロン区切りで  どんどん蓄積していく。 大変申し訳ありませんが宜しくお願い致します。 ################################## #   以下HTML↓ ################################## <HTML> <HEAD><TITLE>フォームサンプル</TITLE></HEAD> <BODY> <FORM METHOD="POST" ACTION="form.cgi"> 日付:<INPUT TYPE="text" NAME="a_day"> 欲しい果物:<SELECT NAME="sentaku"> <OPTION SELECTED VALUE="ringo">りんご <OPTION VALUE="mikan">みかん <OPTION VALUE="momo">もも </SELECT> 何個欲しい?:<SELECT NAME="kosu"> <OPTION SELECTED VALUE="1">1 <OPTION VALUE="2">2 <OPTION VALUE="3">3 ・・・・以下100まで続く <OPTION VALUE="100">100 </SELECT> 名前:<INPUT TYPE="text" NAME="NAME"> コメント:<TEXTAREA ROWS=5 COLS=80 NAME="comment"></TEXTAREA> <INPUT TYPE="submit" VALUE="OK"><INPUT TYPE="reset" VALUE="クリア"> </FORM> </BODY> </HTML> ################################## #   以下perlスクリプト↓ ################################## #!/usr/local/bin/perl require './cgi-lib.pl'; %form = &read_input('euc'); $a_day = $form{'a_day'}; $sentaku = $form{'sentaku'}; if( "ringo" ){ open FILE,"ringo.txt"; @data = <FILE>; close FILE; #最後の行の番号部分を抜き出して、それにフォームで選択された個数を加算 $last_data = pop @data; @temp = split(/,/,$last_data); $new_value = $temp[2] + $in{'kosu'}; $add_data = "$in{'a_day'},$in{'sentaku'},$new_value,$in{'name'},$in{'biko'}\n"; #追記形式でデータを保存 open FILE,">>ringo.txt"; print FILE $add_data; close FILE; } elsif( "mikan" ){ open FILE,"mikan.txt"; @data = <FILE>; close FILE; #最後の行の番号部分を抜き出して、それにフォームで選択された個数を加算 $last_data = pop @data; @temp = split(/,/,$last_data); $new_value = $temp[2] + $in{'kosu'}; $add_data = "$in{'a_day'},$in{'sentaku'},$new_value,$in{'name'},$in{'biko'}\n"; #追記形式でデータを保存 open FILE,">>mikan.txt"; print FILE $add_data; close FILE; } else{ open FILE,"momo.txt"; @data = <FILE>; close FILE; #最後の行の番号部分を抜き出して、それにフォームで選択された個数を加算 $last_data = pop @data; @temp = split(/,/,$last_data); $new_value = $temp[2] + $in{'kosu'}; $add_data = "$in{'a_day'},$in{'sentaku'},$new_value,$in{'name'},$in{'biko'}\n"; #追記形式でデータを保存 open FILE,">>momo.txt"; print FILE $add_data; close FILE; } $kosu = $form{'kosu'}; $comment = $form{'comment'}; print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>フォーム受け取りサンプル</TITLE></HEAD>\n"; print "<BODY>\n"; print "<H2>結果</H2>\n"; print "<HR>\n"; print "番号取得日 :$a_day<BR>\n" print "名前 :$NAME<BR>\n"; print "使用番号  :$kosu<BR>\n"; print "コメント  :$comment<BR>\n"; print "</BODY>\n"; print "</HTML>\n";

  • TNY
  • ベストアンサー率42% (69/163)
回答No.1

むむ、、 単に○○.cgiで結果の表示とCSVへのオープン&書き込みを行えばいいだけのように見えますが… (自分が十分理解できてないのかもしれません) どこで悩んでおられるのかも質問に含めると良いと思います。

perl_beginner
質問者

補足

早速の回答有難うございます。 文字数が足らなくて(質問の場合800字以内)説明不十分となっていました。申し訳ありません。 何が困っているかというと、 まず、自動採番をした結果をテキストファイルに蓄積していく方法がわからないのです。私は、カウンターの応用でできると考えていたのですが、カウンターは現在数+1であることに対し、 質問した方法はクライアントの選択結果により 1~100までの数字が必要になってしまいます。 この数字の変化をどうすればうまく動かせるのかがわからずに苦戦しています。 私は、perlを勉強してまだ間もないので応用が利かない状態であり、うまく説明できない箇所もあります。 しかし、TNYさんが言うとおり、最終的にはCSVへ保存→蓄積を考えています。また参考意見を聞かせてください。 宜しくお願いします。

関連するQ&A

  • エクセルでデータ→集計?入力規制?

    エクセル2003です。A1のセルに、データ→入力規制→リスト→元の値のところに、りんご・バナナ・みかん・ぶどう等を選択して使用しておりますが、B1のセルに、金額まで自動で表示したい場合はどうすればよいですか?例えば、りんごを選択するとB1に100・バナナは200など。

  • perlについて、教えてください。

    perlについて、教えてください。 formからのデータを受け取り、ファイルに書き込んでいく、cgiプログラムを考えているのですが、 その際、ファイルに特定の文字列があった場合、その行を削除して、書き込むという事を行いたいです。 例)test.htmlのテキストボックスに、値を入力(name="a_text")。そして、x.cgiファイルで, 「name=a_text」を取得し、keep.cgiファイルに書き込む。 再度、test.htmlの入力値を受け取り、ファイルに書き込む際に、ファイルに「a_text」があれば、その行を削除してから、a_textの2回目の入力値を書き込みたいと考えています ご存知の方、ぜひ、ご教授下さい。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • エクセル・別のファイルを参照

    ファイル名 りんご みかん と、2個あったとします。 それぞれ、同じ形式で数字が同じセルに入っています もう一つももという名前のファイルをつくり もものB1に、 りんごのB1を表示させたいときは、 もものB1にカーソルを置いて、=を押して りんごのB1をクリックすれば、式が入りますよね。 それは、できるのですが、 このりんごをみかんに変更するときは、どうしたらいいのでしょうか? もものA1に りんごやみかんといったファイル名を表示させることによって もものB1には、自動的に、A1で選択したファイルの中のB1が表示されるような設定にしたいのです。 わかる方いらっしゃいましたら、教えてください。よろしくおねがいします。

  • C言語 ファイル入出力について

    test.txtというテキストファイルに入力されている文字を読み込んでtest1.txtに7文字になったなら改行して2行目に書き込み、また2行目が7文字以上になったら3行目に書き込むというプログラムを作りたいのですがどうもうまくいきません。色々ネットで探したりしたのですがstrlenをうまく使うのかな~ぐらいしか見当はつきません・・・。 何かよいアドバイスをお願いします!m(_ _)m 例 test.txt --------------------------------- 私の一番好きな食べ物はリンゴです。 --------------------------------- ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ test1.txt ---------------------------------- 私の一番好きな 食べ物はリンゴ です。 ----------------------------------

  • excelの入力規則リストで重複不可にするには

    エクセルの入力規則でリストを利用して【プルダウンメニュー】を作成しています。 リストのデータを重複して選択できないようにするにはど のようにすればいいでしょうか? 例をあげるとしして 仮にA、b、Cの3つのセルに入力規則のリストを設定していずれも元の値が 『リンゴ』『みかん』『バナナ』とした場合。 Aのセルでリンゴを選択した時BやCのセルでリンゴを選択できないようにするに します。 VBAは全く分からないのでできれば関数で やる方法をご教授頂ければと思います。 宜しくお願いします

  • セルの文字列にあうセルに数値を移動させる。

    VB初心者で頑張っているのですが なかなかうまく作成できないので、よろしくお願いします。 シート1のB4には もも、りんご、みかん のどれかが入力されます。そしてC5には単価が入力されています。 もしシート1のB4にももが入力されたらももの単価(シート1のC5の値)をシート2のA2へ、 もしシート1のB4にりんごが入力されたらりんごの単価(シート1のC5の値)をシート2のA5へ、 もしシート1のB4にみかんが入力されたらみかんの単価(シート1のC5の値)をシート2のA8へ 値を移動させたいと思っています。 できそうなのですが、どうしてもできません。 どうぞよろしくお願いします。

  • コード番号の自動入力

    初めて投稿します。Accessを使用する上で困っていることがあるので相談に乗っていただけると助かります。 クエリなどで、コード番号を入力すると項目が自動入力されるというのが良くあると思うのですが、その逆をやりたいのです。項目をコンボボックスから入力すると該当するコード番号(主キー)が自動入力されるといった具合です。 例えば・・・ NO|項目1|項目2|項目3 1|果物|りんご|青森 2|果物|りんご|長野 3|果物|みかん|宮城 4|果物|みかん|愛媛 5|野菜|大根|長野 見たいなテーブルがあったとします。 項目1~3までをコンボボックスで値入力させ、それに該当するNOを自動入力したいのです。 方法が分かる方、いらっしゃいましたら教えてください。

  • 【EXCEL】 入力規則-リストを利用したaliasによるデータ参照入力

    EXCELでの話です。 例えば、下記データ構造("代表名:ID")をリストに登録しておくとします。 "リンゴ:A1" "みかん:A2" "キャベツ:B1" あるセルに入力規則の設定をして、プルダウンメニューに上記リストを表示させます。 この後、以下のような制御をさせることは可能でしょうか? ■選択した情報からIDを読み取り、対象セルに自動入力させる。  (例.ユーザが"みかん:A2"を選んだ場合、そのIDである"A2"のみをセルに自動入力させる) できれば、マクロを使わずに、既存のファンクション(入力規則などの)のみで実施したいと考えています。

  • エクセル 自動転載

    入力欄 1月1日 リンゴ 4 1:1月1日 リンゴ 4 ------------------------------ 2: ------------------------------ 3: ------------------------------ 入力欄に記載すると自動に、2番3番…と自動転載される方法を教えて下さい。 よろしくお願いいたします。

  • エクセル 他シートに特定項目のみ自動入力する方法

    質問 エクセルで、次のように設定することが、関数またはマクロでできませんでしょうか。どうか知恵をお貸しください。 Sheet1(購入一覧)  果物  単価(円)  個数  購入金額(円) みかん    100     2  200 りんご    200 3 600 Sheet2(みかん)  Sheet1の「果物」列で「みかん」と入力すると、「みかん」行全体(「果物」列~「購入金額(円)」列まで)が自動入力される。  一方、Sheet1で「果物」列に他の果物(りんごなど)を入力しても、Sheet2に自動入力されない。 Sheet3(りんご)  Sheet1の「果物」列に「りんご」と入力すると、「りんご」行全体(「果物」列~「購入金額(円)」列まで)が自動入力される。  一方、Sheet1で「果物」列に他の果物(みかんなど)を入力しても、Sheet3に自動入力されない。