• ベストアンサー

ファイル(件数不定)の中身を変更するcgi

お世話になります。 英字で名前と点数を持ったファイルがあります。 yamada<>100<> yoshida<>96<> ueda<>76<> sakurai<>77<> のような。 保有件数は分かりません。 この英字を漢字に直すcgiを 考えたいのですが。 例えば yamada()100 yoshida()96 ueda()76 のように表示して、()(input-boxのイメージです)に漢字を入れさせる。 どのように考えればよいのでしょうか。 サンプルを表示して貰えると有難いです。 宜しくお願いします。

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.1

仕様の詳細が書かれていないので、不明な点は想像で書いてみました。 新規ファイルを作成し、以下のように末尾に漢字名が入るようにしました。 yamada<>100<>山田 yoshida<>96<>吉田 ueda<>76<>上田 sakurai<>77<>桜井 以下、そのコードです。 ファイル名は、質問者さんの環境に合わせて適宜変えてください。 use CGI; use Fcntl qw(:flock); my $org_file = 'score.txt'; # オリジナルファイル(漢字名なし) my $new_file = 'new_score.txt'; # 新規作成ファイル(末尾に漢字名あり) my @students; open my $fh, -f $new_file ? $new_file : $org_file or die $!; flock $fh, LOCK_SH; while ( my $line = <$fh> ) { chomp $line; my %data; @data{ qw(name score kanji) } = split /<>/, $line, -1; push @students, \%data; } close $fh; my @kanji_names = CGI->new->param('kanji'); if (@kanji_names) { open my $out, '>', $new_file or die $!; flock $out, LOCK_EX; for my $i ( 0..$#students ) { print {$out} "$students[$i]{name}<>$students[$i]{score}<>$kanji_names[$i]\n"; $students[$i]{kanji} = $kanji_names[$i]; } close $out; } print "Content-Type: text/html\n\n"; print qq{<form method="post"><p>\n}; for my $student (@students) { print qq{$student->{name}<input type="text" name="kanji" value="$student->{kanji}">$student->{score}<br>\n}; } print q{<input type="submit" value="送信"></p></form>};

nagahaha
質問者

お礼

早速有り難うございました。 全く読めませんでしたが、 とにかくコピーして動かしてみましたら、 完璧です。 言うこと無しです。 チャンと真ん中にインプットボックスが開き、 漢字を入れて送信を押すと後ろに漢字が入った新しいファイルが出来ていました。 何となくしかやっていることが分かりませんが、 とにかく完璧に動いているので、 今後同じことを考えるのに基本形になると思います。 勉強します。 そして財産にします。 お世話になりました。 どうも有り難うございました。 20点しか差し上げられないのが残念です。

関連するQ&A

  • CGI(Perl)のメッセージボックス表示について

    CGI(Perl)のメッセージボックス表示について 上記について質問です。 <input type=submit value=" 送 信 "$fm> <input type=reset value="リセット"$fm></td></tr></table></form></ul><hr width=\"95\%\"> _FORM_ 上記のソースで送信ボタンを押した後に メッセージボックスを表示させてif関数等で 「はい」「いいえ」と分けたいのですが、 検索してもサンプルソースが中々見つかりません。 はいを押した時に送信されて、 いいえの時に「送信を中止しました」と表示される メッセージボックスを表示したいのですが・・・・。 どうすれば良いのでしょうか・・・。

    • ベストアンサー
    • Perl
  • perl/cgiについて、教えて下さい。

    perl/cgiについて、教えて下さい。 行いたい事ですが、 1:a.html(テキストボックスとsubmitボタンがあるだけです) 2:b.html(テキストボックスとsubmitボタンがあるだけです) 3:c.html(1,2のテキストボックスの内容を表示するだけです。) 4:x.cgi があります。4のcgiにはまだ何も記述していませんが、1,2のテキストボックスで入力した値を c.htmlに表示させたいと考えています。 又、c.htmlで値を変更すると、1,2のテキストボックスの値も連動して変わるようにしたいです。 例)a.htmlのテキストボックスで「13」と入力してsubmitボタン押下。c.htmlに「13」が表示される。 c.htmlで「13」を「22」に変更すると、a.htmlのテキストボックスの値も「22」になるといったイメージです。 どうぞ、宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • phpで表示件数をcsvの項目ごとに出す

    初心者です、2点分からないことを投稿させていただきます。 下記サイトを参考に、 phpでcsvを読み込み表示するサイトを作成しています。 http://affiliate.aki-f.com/prog/cat/cat9.html 「1ページを10件表示に制限する」方法で、 全件数の表示をすることはできるのですが 各カテゴリページ毎のページ送りを付ける方法がわかりません。 下記サンプルページでいうと 「1.ホームページ」をクリックした後のページを 10件ずつ表示にしたいという感じです。 http://affiliate.aki-f.com/prog/sample/sample30/ もう1点は、 「1.ホームページ」の横に、そのカテゴリの件数を 表示させる方法が分かりません。 例) ┏ 1. ホームページ作成(5) ┣ 2. Webデザイン(2) ┣ 3. CGI(0) ┗ 4. JavaScript(8) としたいのですが、教えて頂けませんでしょうか? お願い致します。

    • ベストアンサー
    • PHP
  • サイト内検索cgiの修正について

    http://www.kent-web.com/cgi/wfinder.cgi を使用しています。 ですが、これのキーワードボックスを使うのではなく、FLASHで作成したテキストボックスとボタンを使用して 検索を行いたいのです。 <FORM ACTION="$script" METHOD="POST"> <INPUT TYPE=TEXT NAME=word STYLE="BORDER-STYLE:SOLID; BORDER-COLOR:GRAY; BORDER-WIDTH:1;" SIZE=40 VALUE="$in{'word'}"> <INPUT TYPE=SUBMIT STYLE="BORDER-STYLE:SOLID; BORDER-COLOR:GRAY; BACKGROUND-COLOR:SILVER; BORDER-WIDTH:1;" VALUE="検索"> <BR><BR> <B>表\示件数</B> <SELECT NAME="view"> として、テキストボックスに、FLASHのテキストボックスからデータを入れることはできましたが、この後、「検索」ボタンを押さなくてはなりません。 そうではなく、FLASHの検索ボタンをおしたら検索結果が出るようにしたいのです。 上記のcgiファイルをどのように変更すればいいのでしょうか?

    • ベストアンサー
    • CGI
  • htmlで、cgiに渡す文字列を結合させたい

    基本的なところだとおもうのですが、教えてください。 現在: テキスト入力値 を 外部cgiに渡す ↓ やりたいこと: 2つ以上のセレクトボックス+テキストを空白で結合させ、それを、現在のテキスト入力値と同じように、外部cgiに渡したい。 現在、以下のようなhtmlになっています。 テキストを入力するのをやめて、2つ以上のセレクトボックスを配置し、そのセレクトボックスで選択されたものを、空白で結合させ、テキストボックスで入力されたものと同じように、cgiに渡したい。 現在のhtmlの一部 <form method="post" action="http://~/cgi-bin/foo.cgi"> <input name="word1" style=""> <input value="検索" type="submit"> を2つのセレクトボックスで、選択させた上で、テキストと結合する。 イメージ的には、 <select name="word3"><option value=" " selected="selected"> </option><option value="a">a </option><option value="b">b <select name="word4"><option value=" " selected="selected"> </option><option value="c">c </option><option value="d">d <input name="word2" style="" size=2> として、 word1 = word3 + " " + word4 + " " + word2 のように、文字列を結合させた形で、cgiに渡したいのです。 なにとぞよろしくお願いいたします。

  • PerlでCGIを制作している初学者です。

    PerlでCGIを制作している初学者です。 画像付きのアンケートを作ろうとしているのですが、 その際のページの切り替えがうまくいきません。 普通に1ページに、ボタンやフォームを配置したアンケートは作れるのですが、 自身が作りたいのは、紙芝居のごとく、 1ページ目に画像とアンケートの選択肢であるチェックボックスがあり、 チェックボックス入力後に回答を押すと同時に、配列へチェックボックスの答えを格納し、 2ページ目のアンケートへ移るというものです。 1ページ目や2ページ目のhtmlファイルならびにcgiファイルは用意できているのですが、 1ページ目の返答ボタンをおした際の処理の記述がわかりません。 例えば、 1ページ目 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> <CENTER> <img src="sample.jpg" alt="01" width=800px height=600px> <FORM method="POST" action="post.cgi"><BR> <INPUT type="radio" name="answer" value="010" checked>complete mismatch  <INPUT type="radio" name="answer" value="011">mismatch  <INPUT type="radio" name="answer" value="012">neutral  <INPUT type="radio" name="answer" value="013">match  <INPUT type="radio" name="answer" value="014">complete match  <BR> <BR> <INPUT type="submit" name="submit" value=" SEND "> <BR> </FORM> </CENTER> </BODY> </HTML> と記述し、 post.cgi #!/perl/bin/perl print "Content-type: text/html\n"; print "\n"; read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); print "REQUEST_METHOD : $ENV{'REQUEST_METHOD'}<br>\n"; print "CONTENT_LENGTH : $ENV{'CONTENT_LENGTH'}<br>\n"; print "DATA : $data<br>\n"; としたとき、 1ページ目でsample.jpgについての意見をラジオボタンで選択し、それをpost.cgiにて表示させるというサンプル(ここを後で変数の格納に変えます)ですが、この時、1ページに似た構成の2ページ目のアンケートへのリンクの仕方がわかりません。 イメージ的には、 1ページ目表示→回答を配列[0]に格納→2ページ目表示→回答を配列[1]に格納→・・・ 最終的には、各ページの回答を記録した配列を出力します。 以上のようなことを実現したいのです。 WEBなどを探してみたのですが、1ページにボタンやフォームがたくさん埋め込まれたものは発見したのですが、この紙芝居的なアンケートのヒントになりそうなものが見つかりませんでした。 アドバイスや、忠告などで結構ですので、回答を頂けると幸いです。

    • 締切済み
    • CGI
  • フォントダイアログのサンプル文字を変更するには?

    .NET C# でフォントダイアログボックスを表示しています フォントダイアログボックスの中のサンプル文字(添付写真の赤丸内の文字)を変更することは可能でしょうか? ボックスで指定したフォントは数字しか使用しません よって漢字、アルファベットのサンプルは不要なのです 出来ればサンプル文字を半角文字の 1234567890 と出来ればベストなのですが・・・・・ 色々と調べましたが分かりません ご存知でしたらお教えください

  • 1つのフォームで2つのcgiにデータを送るには

    どうぞよろしくお願いします。 テキストエリアにデータ入力して送信ボタンを押すと、 入力した内容が2つのcgiに送られるというようにしたいのですが、こういったことは可能でしょうか? イメージとしては下記のような感じです。 <form action="CGI名1" action="CGI名2" method="POST"> <inpu type="text" name="text1" size="32"> <input type="submit" value="送信"> </form> 両方の送信結果を別々のウインドウで表示します。 もしformタグでは不可能な場合、何か代換法がありましたらよろしくお願いいたします。

    • 締切済み
    • CGI
  • CGIでチェックボックスのエラーチェック

    下記のような感じで チェックボックスをいくつか配置し、CGIで動かしています。 それぞれの質問に関して未選択がある場合、 メッセージボックスで「未選択があります」と表示させたいです。 できればjavascriptでなくCGIでやりたいです。 どのようにコードを書けばいいですか? ためしに以下のように書いてみましたがだめでした。 ・・・ elsif ($q1 eq "" && $q2 eq "") { &error($error = "すべての項目に回答して下さい"); } ・・・ お願いいたします! <form name="q1" action="test.cgi" method="POST"> Q1 <input type="radio" name="q1" value="q1_a"> A <input type="radio" name="q1" value="q1_b"> B <input type="radio" name="q1" value="q1_c"> C Q2 <input type="radio" name="q2" value="q2_a"> D <input type="radio" name="q2" value="q2_b"> E <input type="radio" name="q2" value="q2_c"> F </form>

    • ベストアンサー
    • CGI
  • CGIでテキストボックスの内容によって条件分岐

    CGI超初心者です。 htmlファイルに設置したテキストボックスの値によって CGIで表示させる内容を変えたいです。 ネットで検索してコードを作成してみたのですが うまくいきません。 どのように修正すればいいのでしょうか? test.html---------------------------------------- <FORM action="test.cgi" method="POST"> 変数を入力 <INPUT type="text" name="hen"> <INPUT TYPE="submit" VALUE="送り"> </FORM> ------------------------------------------------- test.cgi----------------------------------------- #!/usr/local/bin/perl $h = $FORM{'hen'}; print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head><title>サンプル</title></head>\n"; print "<body>\n"; if ($h > 50) { print "<p>変数hの内容は50より大きいです。</p>\n"; } else { print "<p>変数hの内容は50より小さいです。</p>\n"; } print "</body>\n"; print "</html>\n"; exit; ------------------------------------------------- テキストボックスに、50以上の数字を入力しても、50以下の数字を入力しても どちらも 「変数hの内容は50より小さいです。」 と表示されてしまいます。 よろしくお願いいたします! ※ 前回の質問(http://okwave.jp/qa/q8179935.html) より、CGIは使わない方向で検討中ですが CGIに途中まで足をつっこんでしまい、 気になったので質問させていただきました。

    • ベストアンサー
    • CGI

専門家に質問してみよう