• 締切済み

解析機能の拡張について

おはようございます。いつもお世話になっています。 今回は解析機能の拡張についてお聞きしたいと思います。 解析機能については、かんたん作成.comさんのcgiをお借りしました。 http://www7a.biglobe.ne.jp/~wwwwww/analyzer/ これをベースに、検索ワードの集計機能を追加しようと思っております。 word1、word2に検索ワードの表示・分割がありますが、新たにword3を設けて分割されたものを集計し、表示する処理をしたいです。 集計については、前回までで教えていただいた正規表現を用いて自ら組んでみたのですが、変数が一致していないせいか上手く表示できません。 以下に検索ワードを処理しているプログラムを記載します。 elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #検索ワード my ($n, $pair, $word); if($referer =~ /\?/) { my ($url, $query) = split(/\?/, $referer); for($n = 0 ; $n < @search ; $n++) { if($url =~ /$search[$n][1]/) { foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); if($key eq $search[$n][2]) { $word = $value; last; } } last; } } if($word) { $word =~ tr/+/ /; $word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; if($FORM{'mode'} eq "word1") { ++$freg{$word}; } elsif($FORM{'mode'} eq "word2") { my $word2; $word =~ s/\x81\x40/ /g; foreach $word2 (split(/\s+/, $word)) { if($word2) { ++$freg{$word2}; } } } #=====================================================================EDIT elsif($FORM{'mode'} eq "word3") { my %word_of = map {$_ => 0} %freg; foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { $word_of{$search_key}++ if $word =~ /$search_key/; } } foreach ( sort ( keys %word_of ) ){ print "<table><tr><td>「$_」 </td><td> $word_of{$_} 件</td></table>\n"; } } #=====================================================================END } } } } word3の項目が現在私が編集している部分です。 プログラム全体を通して、私自身が望む動作を可能とする部分の追加は行ったと思うのですが、見落としている点があるかもしれません。 また前述したように、変数が一致していないのかもしれません。 おかしな点に気づかれたら、お手数ですがお教え願えますか。 もしかしたら初歩的なミスをしているかもしれませんが、よろしくお願いいたします。 不明な点などございましたら、随時対応します。 ここでは書ききれないため、現在編集中のcgiファイルを添付データとして貼り付けておきます。

noname#97332
noname#97332
  • Perl
  • 回答数4
  • ありがとう数3

みんなの回答

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

>>%freg = map {$_ => 0} keys %freg; >最初の%fregは,自分で定める値ですよね? >だとすると,%fregはすでに存在している変数なので,別の名前にしようとおもいます. 後ろのコードで、%fregに入った値を表示していますので、%fregに値を入れてください。 >>foreach my $word ( keys %freg ) { >の,$wordも既に存在している変数なので,$wordsに名前を変えました. my $wordとレキシカル変数宣言していますので、変える必要はないと思いますが、 もちろん変えてもかまいません。 >>$freg{$search_key}++ if $word =~ /$search_key/; >にて,「Unmatched [ before HERE mark in regex.」というエラーが出てしまいました. エラーの意味はちょっと分かりませんが、文字コードがShit-JISならばそれに絡む エラーかもしれません。 その場合は、以下のようにするとエラーが出なくなると思います。 $freg{$search_key}++ if $word =~ /\Q$search_key\E/;

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

前半がデータを集計するコード(%fregというハッシュに集計データが入る)で、 後半がその集計したデータを表示するコードだと思います。 No.2の改造では、"word3"モードのとき、表示するコードも書いてしまったので、 表示がダブってしまったのだと思います。 表示は既存のコードにまかすのがスマートだと思いますので、以下の改造ではどうで しょうか? #-- 変更 --------------------------------------------------------- elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #検索ワード #----------------------------------------------------------------- my ($n, $pair, $word); if($referer =~ /\?/) { my ($url, $query) = split(/\?/, $referer); for($n = 0 ; $n < @search ; $n++) { if($url =~ /$search[$n][1]/) { foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); if($key eq $search[$n][2]) { $word = $value; last; } } last; } } if($word) { $word =~ tr/+/ /; $word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; if($FORM{'mode'} eq "word1") { ++$freg{$word}; } #-- 変更 --------------------------------------------------------- elsif($FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #----------------------------------------------------------------- my $word2; $word =~ s/\x81\x40/ /g; foreach $word2 (split(/\s+/, $word)) { if($word2) { ++$freg{$word2}; } } } } } } } #-- 追加 --------------------------------------------------------- if($FORM{'mode'} eq "word3") { %freg = map {$_ => 0} keys %freg; foreach my $search_key ( keys %freg ) { foreach my $word ( keys %freg ) { $freg{$search_key}++ if $word =~ /$search_key/; } } } #-----------------------------------------------------------------

noname#97332
質問者

お礼

早速のお返事ありがとうございます. 確かに,既存の表示コードに任せてしまった方がシステムとしても素直になりますね. ですが,最後のif文でやはりエラーが出てしまいます. >%freg = map {$_ => 0} keys %freg; 最初の%fregは,自分で定める値ですよね? だとすると,%fregはすでに存在している変数なので,別の名前にしようとおもいます.それから, >foreach my $word ( keys %freg ) { の,$wordも既に存在している変数なので,$wordsに名前を変えました. このプログラムですと, >$freg{$search_key}++ if $word =~ /$search_key/; にて,「Unmatched [ before HERE mark in regex.」というエラーが出てしまいました. 初歩的なエラーかもしれませんが,このエラーはどういったものなのでしょうか? お忙しいかとは思いますが,よろしくお願いします. お手数おかけします.

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

すいません、No.1ではなく、こうではないかなと思います。 #-- 変更 --------------------------------------------------------- elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #検索ワード #----------------------------------------------------------------- my ($n, $pair, $word); if($referer =~ /\?/) { my ($url, $query) = split(/\?/, $referer); for($n = 0 ; $n < @search ; $n++) { if($url =~ /$search[$n][1]/) { foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); if($key eq $search[$n][2]) { $word = $value; last; } } last; } } if($word) { $word =~ tr/+/ /; $word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; if($FORM{'mode'} eq "word1") { ++$freg{$word}; } #-- 変更 --------------------------------------------------------- elsif($FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #----------------------------------------------------------------- my $word2; $word =~ s/\x81\x40/ /g; foreach $word2 (split(/\s+/, $word)) { if($word2) { ++$freg{$word2}; #-- 追加 ---------------- push @search_words, $word2; #------------------------ } } } } } } } #-- 追加 --------------------------------------------------------- if($FORM{'mode'} eq "word3") { my %word_of = map {$_ => 0} @search_words; foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { $word_of{$search_key}++ if $word =~ /$search_key/; } } foreach ( sort ( keys %word_of ) ){ print "<table><tr><td>「$_」 </td><td> $word_of{$_} 件</td></table>\n"; } } #-----------------------------------------------------------------

noname#97332
質問者

お礼

お礼から失礼します. 教えてくださったプログラムを確認したところ,こちらの変数のタイプミスで表示がされなかったことが判明しました. 度々申し訳ありません. 一応表示はできたのですが,word2で設けたページと同じ処理がword3でも反映されてしまいます. >elsif($FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { と,word2で行う処理の部分にword3も同時に設けているのが原因でしょうか? if($FORM{'mode'} eq "word1") { (省略) } elsif($FORM{'mode'} eq "word2") { (省略) } elsif($FORM{'mode'} eq "word3") { (省略) } と,それぞれのページの指定を行っていると私は解釈していました. なので,最後に追加するif文の内容がページに反映されていないと思うのですが,どうでしょうか? 厚かましいかとは思いますが,ご意見をいただけたら嬉しいです. 私なりにもいろいろといじってみたいと思います. ご都合がついた時でよろしいので,引き続き宜しくお願いします.

noname#97332
質問者

補足

回答ありがとうございます. 現在動作環境のもと,お教えいただいたプログラムに変更してみたところ,動作がページに反映されず,空白のページでした. ご丁寧に教えていただいたのに申し訳ありません. 変数が一致していないのでしょうか?それともほかに原因があるのでしょうか. 度々お手数をお掛けしますが,宜しくお願いします.

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

実際に動かすことができないので私自身が検証できてませんが、以下のように追加 した場合、所望の動作は得られないでしょうか? elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2") { #検索ワード my ($n, $pair, $word); if($referer =~ /\?/) { my ($url, $query) = split(/\?/, $referer); for($n = 0 ; $n < @search ; $n++) { if($url =~ /$search[$n][1]/) { foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); if($key eq $search[$n][2]) { $word = $value; last; } } last; } } if($word) { $word =~ tr/+/ /; $word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; if($FORM{'mode'} eq "word1") { ++$freg{$word}; #-- 追加 ---------------- push @search_words, $word; #------------------------ } elsif($FORM{'mode'} eq "word2") { my $word2; $word =~ s/\x81\x40/ /g; foreach $word2 (split(/\s+/, $word)) { if($word2) { ++$freg{$word2}; #-- 追加 ---------------- push @search_words, $word2; #------------------------ } } } } } } } #-- 追加 --------------------------------------------------------- if($FORM{'mode'} eq "word3") { my %word_of = map {$_ => 0} @search_words; foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { $word_of{$search_key}++ if $word =~ /$search_key/; } } foreach ( sort ( keys %word_of ) ){ print "<table><tr><td>「$_」 </td><td> $word_of{$_} 件</td></table>\n"; } } #-----------------------------------------------------------------

noname#97332
質問者

お礼

回答ありがとうございます! 諸事情により返答が遅れてしまって本当に申し訳ありませんでした。 本日動作環境の整った場所で教えていただいたプログラムを動かしてみようと思います。 丁寧な対応ありがとうございましたー

関連するQ&A

  • 解析機能について

    おはようございます.毎回お世話になっております. IDを紛失してしまい,前回まででご回答いただいたのにも関わらず,返信できず申し訳ありませんでした; 今回は前回までの質問と結果を踏まえ,質問させていただきます. 私は現在ホームページの解析機能をいじっています. 解析機能のベースとなっているのは下記で配布されているものです. URL記載失礼します. http://www7a.biglobe.ne.jp/~wwwwww/analyzer/ 私の追加として,検索ワード解析機能(word,word2の部分)に新たにword3を設けて,word2までで分割された各単語を集計し表示させようと思っております. 現在検索ワードの表示はできているのですが,変数がマッチしていないためか,うまく集計してくれません. 以下に追加部分のコードを記載します. elsif($FORM{'mode'} eq "word3") { push my @search_words, $word; my %word_of = map {$_ => 0} @search_words ; foreach my $search_key ( keys %word_of ) { foreach my $words ( keys %word_of ) { $word_of{$search_key}++ if $words =~ /\Q$search_key\E/; } } foreach ( sort ( keys %word_of ) ){ print = qq[<table width="600"><td width="400">[$_ ]</td><td width="50"> $word_of{$_} 件</td><td with ="150"><img src="bar.gif" width=$word_of{$_} height=10></td></table>\n]; } } 初歩的なところで間違っている可能性もあるかもしれませんが,おわかりになりましたら,ご助力ください. 不明な点などございましたら随時お答え致します. よろしくお願いします.

  • この意味を教えて下さい。

    よく、CGIを見ていると始めのほうにこのような行があるのですが、 これはどうゆう意味があるのでしょうか? if ($FORM{'mode'} eq 'view') { &view;exit; } elsif ($FORM{'mode'} eq 'delete') { &delete; } elsif ($FORM{'mode'} eq 'input') { &input; } また、「$FORM{'mode'} 」の意味も教えていただきたいのですが・・・。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • METHOD=GETでパラメータを渡す時に日本語が文字化けする。

    以下のようにMETHOD=GETでCGIスクリプトにパラメータを渡してQUERY_STRINGから読み出す場合、$a_wordが日本語だと文字化けして正しく送れません。 http://~/~/wwwperl.cgi?mode=tophtml&page=$next_line&a_word=$a_word http://~/~/wwwperl.cgi?mode=tophtml&page=10&a_word=テレビ朝日 $a_wordの「テレビ朝日」が「テ・E喞・」となってしまう。 フォームで送ればちゃんと表示されるのですが、ここはどうしてもMETHOD=GETで渡したいのです。 どなたか理由または解決方法を教えていただけると嬉しいのですが・・・ スクリプトはEUCで書いています。Jcode.pmを使用。 エンコード部分はこんな感じです。 sub decode { my $buf; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } foreach ( split(/&/, $buf) ) { my ($key, $val) = split(/=/); $key =~ tr/+/ /; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; Jcode::convert(\$val, 'euc'); $FORM{$key} .= "\0" if (defined($FORM{$key})); $FORM{$key} .= $val; } $mode = $FORM{'mode'}; $page = $FORM{'page'}; $a_word = $FORM{'a_word'}; }

    • ベストアンサー
    • Perl
  • Power Searchでチェックボックスから検索(改造)

    初めまして質問させて頂きます。 Power Search Ver.1.11(配布元 ttp://dream.lib.net/room/cgi/e_ps.html)を今回設置しようと試みたのですが、検索を行う際、検索文字列を入力せず、チェックボックスのチェックのみで動作するように指定することが出きずに躓いています。 「ps_search.cgi」の275行からの内容を以下のように変更して見たのですが、500エラーが出てしまいます。(現在はエラーが出る直前の状態に設置アドレス先のCGIは戻してあります) 改造の内容で恐縮なのですが、もし宜しければお知恵を拝借いただけないでしょうか。 設置url http://faq.qp.land.to/search/ エラーが出たcgi全文 http://faq.qp.land.to/search/pwsrh.html ------------------------------------------------ sub search{ #通常検索 my @terms = split(/ /,lc($word)); my (@site,$catlimit,$flag,$data,$a1); if ($metasearch eq "a"){ $catlimit = "<c>$cat[0]<"; } elsif ($metasearch eq "b"){ $catlimit = "<c>$cat[0]"; } ------------------------------------------------ 上の部分を、 以下のように変更しました。 ------------------------------------------------ sub search{ #通常検索 if ($word eq ""){ my @terms = /; } else{ my @terms = split(/ /,lc($word)); } my (@site,$catlimit,$flag,$data,$a1); if ($metasearch eq "a"){ $catlimit = "<c>$cat[0]<"; } elsif ($metasearch eq "b"){ $catlimit = "<c>$cat[0]"; } ------------------------------------------------ 他に、基本から変更した部分は以下となっています。 86行目 変更前 if ($word eq ""){&jump($toppage);} 変更後 if ($word eq ""){&search;} どうか宜しくお願い致します。

    • ベストアンサー
    • CGI
  • 以下の関数の解説お願いします。

    Perl初心者のため、stdio.plにある この関数のやっていることがよく分からず困っています。 sub searchString #($str, $key, $mhmode, $lc, $z2h, $k2h, $igmark) { local($str, $key, $mhmode, $lc, $z2h, $k2h, $igmark) = @_; local($once, $from, $to); #static $key2, $key3; return 0 if ($str eq "" || $key eq ""); if ($key eq $key2) { $key = $key3; $once = 1; } else { $key2 = $key; } if ($jcode'version) { if ($k2h) { $from = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポゐゑァィゥェォャュョッ'; $to = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽヰヱぁぃぅぇぉゃゅょっ'; } if ($z2h) { $from .= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-=_|*!?”#$¥%&@:;'; $to .= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-=_|*!?"#$\%&@:;'; } if ($igmark) { $from .= '-ー・/_ '; $to .= '------'; } if ($from) { &jcode'tr(*str, $from, $to); &jcode'tr(*key, $from, $to) if (!$once); $str =~ tr/-_\///d; $key =~ tr/-_\///d; } } if ($lc) { $str =~ tr/A-Z/a-z/; $key =~ tr/A-Z/a-z/ if (!$once); } $key3 = $key; if ($mhmode == 5 || $mhmode =~ /^BOOLEAN$/i || $mhmode =~ /^BLN$/i) { local($i) = 0; local(@str, $eval); $key =~ s/ +AND +/ & /gi; $key =~ s/ *NOT +/ ! /gi; $key =~ s/ +OR +/ | /gi; $key =~ s/\( +/(/g; $key =~ s/ +\)/)/g; foreach (split /( & | \| )/, $key) { $str[$i] .= $_; $i ++ unless ($_ eq ' & ' || $_ eq ' | ') } for ($i = 0; $i <= $#str; $i ++) { local($option, $open, $close, $find, $not, $key); $key = $str[$i]; if ($str[$i] =~ /^( & | \| )/) { $option = substr $key, 0, 3; $key = substr $key, 3; } $open = $1 if ($key =~ /^(\(+)/g); $close = $1 if ($key =~ /(\)+)$/g); $key =~ s/\(|\)//g; if ($key =~ /^ *! +/) { $key =~ s/^ *! +//g; $not = 1; } $find = index($str, $key) >= 0 ? 1 : 0; $find = $find ? 0 : 1 if ($not); $eval .= "$option$open$find$close"; } $eval =~ s/ & /*/g; $eval =~ s/ \| /+/g; return (eval $eval >= 1) ? 1 : 0; } elsif ($mhmode == 4 || $mhmode =~ /^NOR$/i) { foreach (split / +/, $key) { return 0 if (index($str, $_) >= 0); } return 1; } elsif ($mhmode == 3 || $mhmode =~ /^EOR$/i) { local($flag) = 0; foreach (split / +/, $key) { if (index($str, $_) >= 0) { return 0 if ($flag); $flag = 1; } } return $flag ? 1 : 0; } elsif ($mhmode == 2 || $mhmode =~ /^OR$/i) { foreach (split / +/, $key) { return 1 if (index($str, $_) >= 0); } return 0; } elsif ($mhmode == 1 || $mhmode =~ /^NAND$/i) { foreach (split / +/, $key) { return 1 if (index($str, $_) == -1); } return 0; } else { foreach (split / +/, $key) { return 0 if (index($str, $_) == -1); } return 1; } } これを呼び出しているのが、別ファイル内の以下の部分です。 foreach(@datafile){ if($datafile[0] eq $_){ next; } # 1行目は項目名なので next if($param{'query_word'}){ unless(stdio::searchString($_, $param{'query_word'}, $param{'query_search_type'}, 1, 1, 1, 1)){ next; } } push(@search_file,$_); } datafileは 名前,住所,電話番号, 吉田,東京都渋谷区,03xxxxxxxx, といったデータファイルです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl 正規表現について

    Perlに関していつもお世話になっております。 今回も正規表現に関する質問をしたいと思います。 「あ、あい、あいう、あいうえ、あいうえお」というハッシュが存在するときに、「{あ}は○○回出ました。」「{あい}は○○回出ました。」とそれぞれ表示させるコードを組もうと思います。 前回までで皆様に教えていただいたことを元に組んでみました。 #!/usr/bin/perl use warnings; use strict; use utf8; use Encode; my %word_of = ( 'あい' => 0, 'あいう' => 0, 'あいうえ' => 0, 'あいうえお' => 0, 'かき' => 0, 'かきく' => 0, 'かきくけ' => 0, 'かきくけこ' => 0, ); foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { if ( $word =~ /$search_key/ ) { $word_of{$search_key}++; } } } foreach my $key ( sort ( keys %word_of ) ) { # utf8, shiftjis eucjp ... print encode( 'utf8', "「$key」 は $word_of{$key} 回出ました" ), "\n"; } これを出来ればeucjpで組みたいのですが、可能でしょうか? 私の思いあたる点、utf8表記の部分をeucjpに直しただけではエラーが出てしまいます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • CGIでの表示の不具合について。

    座席表を作成しようと思い以下のようにしました。 最初の画面で行と列の数を入力。    ↓ その分でテーブルを作成し、入力画面を出す。    ↓ 名前と一緒に数字も入れ、机の向き(1:横向き、2:縦向き)も入力する。    ↓ 完成。 ある程度はうまくいくのですが、なぜか一定のものだけ表示がおかしくなります。 ┏━━━┳━━━━┳━┓ ┃    ┃      ┃  ┃ ┣━━━╋━━━━┫  ┃ ┃    ┃      ┃  ┃ ┗━━━┻━━━━┻━┛ とならなければならないところが ┏━━━┳━━━━┳━┓ ┃    ┃      ┃  ┃ ┣━━━╋━━━━┫  ┣━━┓ ┃    ┃      ┃  ┃   ┃ ┗━━━┻━━━━┻━┻━━┛ となることがあります。 この右端のものは全然関係ない行のログからひっぱられてきます。 でも出るものと出ないものがあります。 表示のコードは $gyou = @FILES; for($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value)=split(/=/,$_); $FORM{$key} = $value; } if ($searchkey eq $FORM{'BUSYO'}){ last; } }#for終わり でログファイルを開いて分解し、 for($n=0;$n<$TATE;$n++){ print "<TR>\n"; for($r=0;$r<$YOKO;$r++){ if ($FORM{"NO$n$r"} eq '1'){ print "<TD COLSPAN=2 CLASS=TD WIDTH=100 HEIGHT=50 ALIGN=CENTER>$FORM{\"NAME$n$r\"}</TD>\n"; } elsif ($FORM{"NO$n$r"} eq '2'){ print "<TD ROWSPAN=2 CLASS=TD WIDTH=50 HEIGHT=100 ALIGN=CENTER>$FORM{\"NAME$n$r\"}</TD>\n"; } } #列の終了 print "</TR>\n"; } #行のfor終了 のように表示させています。

    • ベストアンサー
    • CGI
  • フリーCGI ラジオボタンの改行についてです。

    色々調べましたが、どうしても分からなかった為質問させて頂きます。 http://cgikon.com/search/detail.php3?cgi_id=308 こちらのフリーCGIをお借りして、アンケートを作成することになりました。 質問は、ほぼラジオボタンによる3択です。 デフォルトだと、ラジオボタンは横並びになっているのですが 質問内容が長過ぎるため、見づらくなってしまいます。 その為、ラジオボタンを添付画像のように改行したいと思っております。 おそらく、下記のどこかを変更すればいいとは思うのですが 分かりませんでした…。 # アンケート質問の表示 my($number) = 0; foreach (@question) { ($qtype,$qname,@column) = split(/\t/); next if($qname eq ""); $number++; $key = "Q".$number; print qq! <TR> <TD NOWRAP VALIGN="top"><B>【質問$number】</B></TD> <TD>$qname</TD> </TR> <TR> <TD> </TD> <TD> !; if($qtype =~ /LISTBOX/i) { print qq!<SELECT NAME="$key" SIZE=1>!; foreach (@column) { next if(!$_); print qq!<OPTION VALUE="$_">$_!; } print qq!</SELECT>!; } elsif($qtype =~ /RADIO/i) { foreach (@column) { next if(!$_); print qq!<INPUT TYPE="radio" NAME="$key" VALUE="$_">$_!; } } elsif($qtype =~ /TEXTAREA/i) { print qq!<TEXTAREA NAME="$key" COLS=50 ROWS=5></TEXTAREA>!; } elsif($qtype =~ /TEXTBOX/i) { print qq!<INPUT TYPE="text" NAME="$key" VALUE="" SIZE=50>!; } print qq! </TD> </TR> !; } 配布元のサイト様が今月末で閉鎖される為 それに伴い、個別でカスタマイズなどの依頼対応も出来ない状態です。 申し訳ございませんが、どなたか詳しい方 ご教授頂ければ幸いです。どうか宜しくお願い致します

    • ベストアンサー
    • CGI
  • Perl 指定行への書き込み

    #!/usr/bin/perl require './jcode.pl'; $file = "houkoku.txt"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\t//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/^\s+//; $value =~ s/\s+$//; $FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value; } open( WRITE, "+< $file" ); print WRITE $FORM{'name'},",",$FORM{'color'}."\n"; close(WRITE); foreach ( keys %FORM ) { if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; } } #if ( $FORM{'name'} eq '' ) { $FORM{'name'} = '入力がありません'; } if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; } print "Content-Type: text/html\n\n"; print <<END_HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <center> <table border="1"> <td> $FORM{'name'}</td> <td> $FORM{'color'}</td></tr> </table> </center> </body> </html> END_HTML exit; として、カンマ仕切りでデータを保存できるようになりました。 これを、指定行への書き込みを行いたいのですが、どのようにしたら良いでしょうか。 たとえば、5行目にこのデータを書き込んで、常に5行目を上書き更新するような感じです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ある条件で一致した場合、配列に代入したい

    foreach(0..$#DataLines){ my@aaa= split(/<>/,$DataLines[$_]); if($FORM{No} eq @aaa[1]){ unshift(@bbb,"$DataLines[$_]"); } } print F "@bbb"; した時に配列@bbbにif($FORM{No} eq @aaa[1]){ で一致した場合、その時の配列を全部@bbbに代入したいのですが、最後のしか入らないようなので、これを全部入れるにはどうすれば良いかご教授願えませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう