初心者です。
Perlで分数を保持したいのです。以下のように記述しましたが、保持できていないようです。。
とりあえず整数で持ってきて、Perl内で分数に置き換えるということを考えていますが面倒そうです。分数で直に持ってこられる方法がありましたら教えてください。
Perl内記述
#Q1シングル
for ($i=0;$i<=97;$i++){
$val_name ="Q1_"."$i"."_chk";
$name = 'Q1';
if ($data{$name} eq "$i"){
$$val_name = ' checked';
}else{
$$val_name = '';
}
}
HTML内記述
<TR height="25">
<TD align="center"><INPUT type="radio" name="Q1" value="1/3" _Q1_1/3_CHK_></TD>
<TD>A</TD>
</TR>
ちなみに上記記述において、1/3の部分が整数であればこのプログラムは正常に動きます。なので1/3の持ってきかただけなのですが、
お願い申し上げます。
No.4ベストアンサー
- 回答日時:
もしかして、望んでいるのは
my $result = 1/2 + 1/3;
print $result;
こんな風にしたら、
5/6
と計算して表示するようにしたいって事ですか?
もしそうなら、それについては、
できるとか、できないとか、正確な解答ができませんが、
言えるのは、
>整数であれば何の問題もないのですが
という事なんで、整数だけでうまく行く様に仕様を見直した方が
最終的には早く仕事が終わると思いますよ。
お礼が遅くなり申し訳ありません。
さんざん悩んだ挙句、整数で仕様を見直しました。。。
皆様にいろいろとアドバイス頂いたにもかかわらず、技術が伴わず、かといって時間もかけられず、、で悔しい思いをしました。
これを機につけやきばではなく、しっかりと勉強しなおさなければならない、、と思いました。
ありがとうございました。
No.3
- 回答日時:
こんにちは、
>回答の値を分数で受け取って…
>1/2、1/3というデータでは計算ができないようなのです。…
すみません、まだ良く理解できません。
ラジオボタンの値に"1/2"を指定しておいて、
渡されたスクリプト内部で、0.5 として扱いたいという事ですか?
もしそうなら、受け取った計算式を eval してみてはどうでしょうか
以下実験です。
#! /usr/bin/perl
use strict;
use CGI;
my $q = CGI->new;
my $Q1_value = $q->param("Q1") || 'ありません';
my $result_eval = eval $Q1_value;
print << "END_OF_HTML";
Content-Type: text/html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>
<form action="test.cgi" method="POST">
<input type="radio" name="Q1" value="1/3">
<input type="submit" value="reload">
</form>
<p>受け取ったQ1の値は$Q1_value</p>
<p>$Q1_value の実行結果は $result_eval</p>
</body>
</html>
END_OF_HTML
__END__
ブラウザから、ラジオボタンをチェックしてボタンを押すと
________________________________________________________
受け取ったQ1の値は1/3
1/3 の実行結果は 0.333333333333333
________________________________________________________
と表示されると思います。
でも、重大なセキュリティホールが出来てしまいそうなので、
渡された文字列を厳重にチェックしなければならないと思います。
なぜ、
>「例:非常にそう思う⇒5、ややそう思う⇒4、、など」の整数であれば何の問題もないのですが
これではだめで、
>「例:非常にそう思う⇒1/2、ややそう思う⇒1/3、、など」
こうしなければならないのでしょうか?
もしかしたら、それが分かればもうちょっとマシな回答ができるかもしれませんが…(自信は無いですけど)
お礼が遅くなり申し訳ありません。
さんざん悩んだ挙句、整数で仕様を見直しました。。。
g_p_様にいろいろとアドバイス頂いたにもかかわらず、技術が伴わず、かといって時間もかけられず、、で本当にすみません。
>「なぜ、
>「例:非常にそう思う⇒5、ややそう思う⇒4、、など」の整数であ
>れば何の問題もないのですが
>これではだめで、
>「例:非常にそう思う⇒1/2、ややそう思う⇒1/3、、など」
>こうしなければならないのでしょうか?
理由は、その後、その解答データを
配列で考えると(1,0)が「2」なら(0,1)は「1/2」、(1,2)が「1/3」なら(2,1)が「3」と逆数を計算をするのですが、
そのためにある回答が得られたら、1/2、という設定が欲しかったのです。。まずは整数で持ってきて、分数に置き換える方法で最終的には処理しました。
No.2
- 回答日時:
こんにちは、
いまいちおっしゃりたい事が分かりませんが、
>Perlで分数を保持したいのです。
><TD align="center"><INPUT type="radio" name="Q1" value="1/3" _Q1_1/3_CHK_></TD>
htmlのフォームから送信された Q1 の値を '1/3' という文字列で受け取りたいという事でしょうか?
CGI.pmや類似のモジュールを使ってフォームに入力された値を受け取っているなら、
普通そうなると思うんですが、以下実験です。
#! /usr/bin/perl
use strict;
use CGI;
my $q = CGI->new;
my $Q1_value = $q->param("Q1") || 'ありません';
my $str = "1 / 3";
my $result = 1 / 3;
my $result_int = int($result);
print << "END_OF_HTML";
Content-Type: text/html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>
<form action="test.cgi" method="POST">
<input type="radio" name="Q1" value="1/3">
<input type="submit" value="reload">
</form>
<p>受け取ったQ1の値は$Q1_value</p>
<p>文字列 $str</p>
<p>1 / 3 は $result</p>
<p>1 / 3 の整数部は $result_int</p>
</body>
</html>
END_OF_HTML
__END__
上記のスクリプトを test.cgi として保存(文字コードはeuc-jp)。
ブラウザからラジオボタンをチェックしてボタンを押すと、
___________________________
受け取ったQ1の値は1/3
文字列 1 / 3
1 / 3 は 0.333333333333333
1 / 3 の整数部は 0
___________________________
と表示されると思います。
>ちなみに上記記述において、1/3の部分が整数であればこのプログラムは正常に動きます
スクリプト内のどの部分が整数になれば良いのかわかりませんが、int を使ったらどうですか?
質問を見ただけでは、やりたいことが分かりませんが、
#1氏のご指摘通り、ハッシュや配列を使って解決できるように考えられた方が良いと思います。
この回答への補足
ご回答ありがとうございます。
説明が足りず申し訳ありません。
アンケートを作成していて、回答の値を分数で受け取って、「例:非常にそう思う⇒1/2、ややそう思う⇒1/3、、など」そのデータを使ってPerl内で計算したいのです。
「例:非常にそう思う⇒5、ややそう思う⇒4、、など」の整数であれば何の問題もないのですが、1/2、1/3というデータでは計算ができないようなのです。
ご回答いただいた内容を拝見して、1/2、1/3が文字列として受け取られてしまっているのか、と考えなおしています。
No.1
- 回答日時:
スクリプトを見た感じ、その分数の表記をそのまま
変数名として使おうとしていますよね?
'/' は変数名に使うことはできないので、
それで期待通りに動いていないのだと思います。
>$$val_name = ' checked';
のようなシンボリックリファレンスを使うのではなく、
ハッシュを使うようにして、
> "Q1_"."$i"."_chk";
の結果をハッシュのキーにすればよいのではないでしょうか?
参考までに、現状ではこのようなシンボリックリファレンスを
使うことはコーディングルールとして推奨されていません。
ご回答ありがとうございます。
変数に使えない記号というのを確認しました。
実は前にあるSEの方に組んで頂いたPerlを数年にわたってカスタマイズしながら使っています。私自身プログラムについては全くの素人で、質問が初歩的で本当にお恥ずかしい思いです。
配列、という考え方で再度見直してみます。
大変ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
display: none をすると Enter ...
-
文字の横にプルダウンを表示さ...
-
Application.ScreenUpdating = ...
-
パイソンのクラスについて
-
Pythonでターミナルに文字を出...
-
メモリをアドレスを直接指定し...
-
【メモリ不足で落ちる(python)】
-
vscode 文字化け
-
パイソンのクラスについて
-
どちのほうがすきですか?
-
ACCESS テキストボックスを隙...
-
Python - Excel で Webからデー...
-
パイソンプログラミング
-
結果を得て自動的にページ移動...
-
Perlの例文でif($a==1&&$b==5&&...
-
FindFirst を複数条件で検索
-
ヒアドキュメントで表示した、...
-
CGIでimgタグでalignを使うとエ...
-
構造体の各データの表示につい...
-
I2C接続のLCDディスプレイを使う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
formで特定のinputを送信しない...
-
子windowsからsubmit()後にclos...
-
ホームページビルダーのメール...
-
javascriptでCGIを実行するには
-
if文を入れるとcgiが動きません...
-
テキスト入力後、エンターを押...
-
javaで取得可能な環境変数の値...
-
メール送信フォームつきのポッ...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
どちのほうがすきですか?
-
Pythonでターミナルに文字を出...
-
16進の10進変換について
-
セレクトメニューで2つの項目...
-
実行時エラー 3020の対策
-
文字の横にプルダウンを表示さ...
-
FindFirst を複数条件で検索
-
パイソンのクラスについて
-
<SELECT>タグの折り返し
-
「*:*」って何を意味するのでし...
おすすめ情報