- ベストアンサー
教えてください
何度もこちらでお世話になっております。どうしてうまくいかないのか、教えて下さい。 下記csvファイルは問題ないのですが、それ以外を引数に与えると結果が表示されません。 概要:アンケート ≪test.html≫ ※設問ファイル 質問1~5(3択)まである ≪test.cgi≫ ※結果表示 &ReadParseを使用 @pairs = ($in{'q1'},$in{'q2'},$in{'q3'},$in{'q4'},$in{'q5'}); $values = Gettest("data1.csv",@pairs); print $values,"\n"; ≪test.pl≫ ※サブルーチン sub Gettest { use Text::ParseWords; #// 標準モジュール my @array = @_; my $dfile = shift @array; #// CSVファイル @data = (); #// 配列の初期化(読み込んだデータの格納用) open(IN, "$dfile") or exit; #// データファイルの読込み while(<IN>) { chomp; @fields = quotewords("," => 0 , $_); #// カンマ区切りデータの取り込み foreach $field (@fields){ if(index($field, ":") >= 0) { $field =~ s/:/-/; #// データの整形(1:3→[1-3]) $field = "[$field]"; } elsif(index($field, ",") >= 0) { $field =~ s/,/\|/g;#// データの整形(1,3,4→1|3|4) }} push @data, [@fields]; } close(IN); $rows = @data; $cols = @{$data[0]}; $values = squeezed(@array);#// 該当範囲の絞り込み return "$values\n"; exit; sub squeezed { my @para = @_; my @pos = (0 .. ($cols -1)); my $i, @wk; for($i = 0; $i < $rows -1; $i++) { @wk = (); foreach my $p (@pos) {#// 有効な位置だけ調べる if($para[$i] =~ /$data[$i]->[$p]/) { push @wk, $p; #// パターンマッチする位置を配列に保存 }} @pos = @wk; } if(@pos == 1){ #// 結果算出 return $data[-1]->[$pos[0]]; } else {return exit;#// 結果が該当なし、もしくは2個以上ならエラーを返却 }}} 1;
- みんなの回答 (7)
- 専門家の回答
お礼
BLUEPIXY様、 丁寧且つ解りやすい解説、ありがとうございます。 まだ理解しきっていない部分もありますが、色々試しながら砕いていきたいと思います。 度重なる質問と、お返事に時間がかかってしまい、気を悪くなさったかもしれませんが とても感謝してます。ありがとうございました! ポイント20じゃ、足りないくらい…(^^; またお世話になるかもしれませんが、その時は 宜しくお願い致しますw