フォームから値を配列に渡すときの処理方法
PERLでフォームからのデータの受け取り方、処理の仕方でご教授頂ければ助かります。
よろしくお願いいたします。
配列の要素数の調べ方、処理方法についてご教授頂ければ幸いです。
HTMLよりフォームのデータをcgi-lib.plの[&ReadParse(*in);]受け取っているのですが
●HTML側
セレクトボックスを5つ用意し同じNAME (select01)のnameを付けて
CGI側で受け取りたいと考えております。
(基本的に間違えでしょうか?セレクトボックスの個数分用意したほうがいいでしょうか?)
受け取った値をCGI側で受け取り要素の個数をカウントさせ
条件に合わせてERRORを出したいと考えたのですが・・・
エラーの内容は 1っこ選んであればOKでそれ以外 0の場合はNG 2個以上選択した場合は
NGという形を取りたいのですが。
配列の要素数で分岐できるのかと考えたのですが
そもそもこの考え、処理方法は間違えでしょうか?
アドバイスを頂ければ幸いですm(__)m
require 'cgi-lib.pl';
&ReadParse(*in);
-------------------------
# データ代入
@aaa =$in{'select01'}; #フォームデータを配列に代入
$count= @aaa;
この場合だと 要素の数($count)は 1になっております。
いろいろ調べていますと cgi-lib.pl を使用した場合はブラウザ上で
スペースに見えるが \0 だそうで・・・・
カンマで区切って 要素数を正しく表示させたいと思ったのですがうまくいきません。。
@aaa = split(/\0/,$in{'select01'}); などいろいろ試してみたのですが区切りがうまくいきません
また、
$" = ',';
@aaa = split(/\0/,$in{'select01'});
とすると カウントが変わったのですが・・・・
フォーム側の一番目を選択して送信するとカウントが 1!!
1と5番目を選択して送信したら 5!え??
で要素数を正しくカウントされていないようです。
ちなみに print @aaa; としてみると
aaa,,,,eee と空の内容がカウントされてる?ようなかたちになりました。
ここで、行き詰ってしまいまして、もともとの私の安易な考えが間違えなのか?
書き方が間違えなのか。
と思い皆さまのアドバイスを頂ければ幸いです。
・プログラムの考え方的には間違えなのか
・一般的な正しい処理方法はどうなのか
それとも。。。。要素数で分岐することが可能であるのか。
お手数ですがアドバイス頂ければ幸いです。
No.2ベストアンサー
- 回答日時:
> $count= @aaa;
のようにすると、$count には $#aaa が代入されると勘違いしていました。
書かれているように要素数になるのですね。
質問の件は、
@aaa = split(/\0/,$in{'select01'}) で、正しく取り出せています。
ただ、"aaa\0\0bbb\0\0\0" という文字列を split /\0/ すると
("aaa","","bbb") という配列になり、途中にある空文字列は残りますが、行末の空文字列はなくなります。
なので、
@bbb = grep /./, @aaa;
とでもして @aaa から空文字列の要素を取り除いてから要素数を求めればよいです。
t-okura さま。
早速アドバイスいただきありがとうございますm(__)m
お返事が遅くなりすいません。先ほど試して実行してみました。
grepを使うのですね・・・条件, 調査対象とWEBで見たのですが
なぜ grep/./,@ /./ ドットを使うのか無知なもんで勉強してみます。
実行した結果 無事に解決することができました!!!!ほんとにほんとにありがとうございます。
カウント数で分岐もできました。ありがとうございます!
ただ今回の処理はプログラム的に邪道なのでしょうか??配列の要素数をカウントして
処理する。
初心者でよくわからないながら・・・この方法をとったのですが
ほかの方法をもしご存知でしたら今後のためにもアドバイスいただければ幸いです。
よろしくお願いいたします。
No.3
- 回答日時:
cgi-lib.pl には、\0 区切りの文字列を分割するためのサブルーチン SplitParam が用意されていると思います。
@aaa = &SplitParam($in{'select01'});
ありがとうございます。
そちらもやってはいたのですが 要素数をカウントできず困っておりました。
他の方がご回答いただいた
@aaa = &SplitParam($in{'select01'}); のあと
@bbb = grep/./,@aaa;
とすると要素数をカウントすることができました。
ありがとうございます。
No.1
- 回答日時:
> @aaa =$in{'select01'}; #フォームデータを配列に代入
> $count= @aaa;
> この場合だと 要素の数($count)は 1になっております。
$count が 1 になっているのでしたら、
$aaa[0], $aaa[1] の 2つの要素が存在します。
ありがとうございます。
セレクトボックスで5個選んだ場合も1 何個選んでも1になるのですが。
要素数を正確に数えたいのですが。
一個選んだら 0 2個選んだら1 三個で 2 五個で4と・・
その要素数で分岐をしたいと考えております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
配列を初期化する時ってどうす...
-
perlで配列の要素が空なのを知...
-
DataGridViewに配列の値を表示...
-
csv形式のデータの一部を削除し...
-
ファイル名に日付・時刻を付与...
-
マクロ Publicでの配列定義
-
隣同士の数字を足し合わせる
-
エクセルVBAでTransposeの不思議
-
Perlで<select multiple>の複数...
-
VB6で配列の最大値を簡単に求め...
-
jcode->jfold で禁則処理
-
N88互換BASICで「メッセージの...
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
VBAで3秒だけ時間を止めたい
-
Javaでゲーム
-
ハッシュ検索はなぜ速い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
二次元配列における要素数のは...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
組み合わせについての質問です...
-
隣同士の数字を足し合わせる
-
複数の配列の全ての組み合わせ...
-
perl 初等プログラミングについて
-
jcode->jfold で禁則処理
-
一致する要素が格納されている...
-
チェックボックスのperlでの値...
おすすめ情報