• ベストアンサー

CGIで何%の指示の仕方

CGI勉強中です。 表の中に文章を表示させるのですが、表の幅が狭い場合、自動改行によりとデザインが崩れてしまうのを防ぐためif文で分岐させています。 ----------------- if ($all_width(表の全幅) >= "xxx") {1行で表示} else{2行<br>で表示} -------------------- といった感じです。 でも、この場合、$all_width を%で指示した場合、もちろん100以下なので2行表示してしまいます。 で、もうちょっとカスタマイズして、 ----------------- if ($all_widthに%が使われていたら) {   if ($%使用時の行指定==1){1行で表示} else{2行<br>で表示}   } else{ if ($all_width >= "xxx") {1行で表示} else{2行<br>で表示} } ----------------- こうしたいのですが…文法的におかしくは無いですよね。 で、この「$all_widthに%が使われていたら」という表現方法がわかりません。 何か良い方法は無いでしょうか?よろしくお願いします。

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

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

  • ベストアンサー
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.2

No.1さんの回答通り正規表現を使うと良いと思います。 if ( $all_width =~ /\%/ ) { ... 上記は、$all_widthの値に%という文字列がある場合にtrueを返します。 $all_widthに数字と%しか使われない事が前提で、更に%が文字列の最後にある場合の正規表現は以下のような感じになります。 if ( $all_width =~ /\d+\%$/ ) { ... 正規表現は慣れるまでに多少時間がかかるかもしれませんが、 便利なのものなので覚えておくといいと思いますよ。

master-3rd
質問者

お礼

ありがとうございました。上記方法で無事分岐が出来ました。

その他の回答 (1)

noname#199778
noname#199778
回答No.1

私もPerl/CGIの勉強中ですが… 正規表現で「%」の有無を拾ってはいかがでしょうか。 あまりきれいなソースではないかもしれませんが… $_= $all_width; if (m/\%/){   if ($%使用時の行指定==1){1行で表示} else{2行<br>で表示}   } else{ if ($all_width >= "xxx") {1行で表示} else{2行<br>で表示} } このような感じにすれば、$all_widthの中の文字列に「%」が含まれているかどうかを正規表現で判定して、含まれている場合には前者の、そうでない場合には後者の処理に分岐すると思います。 見当違いでしたら、ごめんなさい。

master-3rd
質問者

お礼

ありがとうございました。

関連するQ&A

  • IF文の書き方。

    CGIでhtml表示部分を作成中です。 if文で以下のような物を構築したいのですが可能でしょうか? 表のサイズ(幅)はユーザーが選べるようにしています($all_width = "xxx";)。 いくつかの項目(リンク)がその表の中にあります。 このときに表の幅が何ピクセル以上だったら一列に表示したいので項目の間には空白を入れそれ以下だと文字が1つだけ下に行くなどのデザイン上おかしくなることを防ぐため改行を入れるという風にしたいのですが… if ($all_width = "xxx"){   ##←ここがよくわからない print <td align=\"center\"><a href=\"xxx\" target=\"$tar\">項目1 </a> <a href=\"xxx\" target=\"$tar\">項目2</a></td>\n"; } else {          ##←ここにもそれ以下だったらが必要? print <td align=\"center\"><a href=\"xxx\" target=\"$tar\">項目1 </a><br><a href=\"xxx\" target=\"$tar\">項目2</a></td>\n"; } 幅がこれ以上だったらこっちを表示、それ以下だったらこっちを表示とさせたいのですが可能でしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • textarea へ、改行させたいテキストデータを書き込むには?

    Perlのprint命令では、print '(1)aaaa <BR>(2)bbbb',"\n"; というように、改行させたい箇所に<BR>を挿入すれば改行させられるとおもいます。ところが、print "<textarea> xxx </textarea>" として、CGIで複数行入力領域を書いたときは、xxxのなかに挿入した<BR>はそのまま文字として表示されてしまいます。  改行させるにはどうしたらいいのでしょうか?  どなたか(ひきつづき^^;;)、御教示をいただければ幸いです。

    • ベストアンサー
    • Perl
  • cgiのif文で行を指定。

    ログファイルから任意の行を取り出すために、フォームで行を指定(入力)後、送信ボタンを押すと 表示させるようにしました。 if文はこんな感じです。 if ($NO == ''){ print &all; } else{ print &no; } 1より大きい時と、何も入力しないときはきちんと希望したものが表示されるのですが、 問題は0を入れたとき(ログファイルの1行目を出したい時)に、何も入力されてないと 認識されてしまうのです。 どうしたらよいでしょうか? ※$NOの後の==をeqに変えると何も入っていなくても0と認識されてしまいます。

    • 締切済み
    • CGI
  • cgiのカスタマイズが上手く行きません

    http://www.rescue.ne.jp/ のサイトにあります 「簡易データベース」http://www.rescue.ne.jp/cgi/database/ のカスタマイズが上手く行きません。 登録の項目を「名前」「星座」「血液型」に絞り登録をし、 「星座」「血液型」の項目選択で両方が一致した人の 「名前」を検索結果に出そうと思っています。 「改造箇所 index.html・・・フォームのカスタマイズ regist.html・・・フォームのカスタマイズ regist.cgi・・・#入力チェック部分、{'EMAIL'}の削除(未使用のため) search.cgi・・・      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data);      とし、それぞれ $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc');      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data); # 血液型 if ($FORM{'BLOOD'} ne 'all') { if ($BLOOD eq $FORM{'BLOOD'}) { ; } else { next; } } # 誕生日 if ($FORM{'BIRTH'} ne 'all') { if ($BIRTH eq $FORM{'BIRTH'}) { ; } else { next; } } と改造。と、最小限のカスタマイズをしたつもりですが、どうしても ●ご指定の条件では見当たりませんでした. となり、検索に引っかかりません。 データ自体はcsvedit.cgiで確認しても、登録はされているようです。 原因、お分かりになりますでしょうか? 何卒!何卒!よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • divやp要素の前後は改行されるとありますがどこから改行されるのでしょうか

    <body> <div align="center"> <br> あいうえお<br> <img src="../xxx/1.jpg" width="640" height="400" border="0"> <br> <p class="text_min"> あいうえお<br> </p> あいうえお<br> <br> </div> </body> 上記の場合、改行位置はこうでしょうか?↓ *改行* <div align="center"> </div> *改行* *改行* <p class="text_min"> </p> *改行* という事でしょうか? 当たり前のような質問ですいません!

  • 指定数、繰り返したい

    下記のようにデータを変数に代入しています。 データがないときは、-----が表示されるようにして 10行~20行表示されるようにするにはどうすればよいでしょうか? 現状はデータがある行しか表示されません。 while ($row = @mysql_fetch_assoc($result)) { extract($row, EXTR_PREFIX_ALL, "row"); $row_url = html_entity_decode($row_url); if($row_title) { $row_title .= $row_title . "<br>"; } else { $row_title .= "---------<br>"; } } }

    • ベストアンサー
    • PHP
  • web上のHTMLタグ入りのtextファイルを表示させてい

    web上にある改行などの単純なタグを含んだ テキストファイルを普通にブラウザでみた場合 改行されずに 一行目<br>二行目 とそのまま表示されると思うのですが、これを 一行目 二行目 と表示させるにはどうすれば良いのでしょうか? 外部からこのテキストファイルを読み込んで表示させる 方法などありましたらよろしくお願いします。

    • ベストアンサー
    • HTML
  • 表の中の改行

    メモ帳を使ってHPを作っているのですが 表の中に長い文章を書くので改行したいのですが <Br>で改行してもうまくいきません。 表の中で改行出来て縦の中央に配置したい場合 どうすればいいでしょうか? 1行と2行が入り混じっています。 <Table Border> <Tr> <Td>1行</Td><Td>2行</Td><Td>1行</Td></Tr> </Table>

  • cgiで文字列操作

    文字列$FILENAME1から★★より右側だけ取り出したいのですが、★★がない場合もあるので、 以下のようにしてみました。 -------------------- $FILENAME1 = "*****★★****"; print "文字列は「$FILENAME1」<BR><BR>\n"; $DIR = "★★"; $MOJISUU = length $DIR; print "探す文字列は「$DIR」<BR><BR>\n"; $position = index $FILENAME1,$DIR; print "$DIRの文字位置は「$position」<BR><BR>\n"; if ($position > 0){ $FILENAME = substr($FILENAME1,$position+$MOJISUU); print "$FILENAME<BR>\n"; } else { print "$FILENAME<BR>\n"; } -------------------- ★★が入ってる場合はうまくいくのですが、入っていない場合うまくいきません。 (結果が表示されない) どこを直したらいいのでしょうか?

  • Objective-C if

    もう一度すみません http://okwave.jp/qa/q6956458.html 前回の質問で解決したと思ったのですが XXX.hidden&&!YYY.hidden.... と条件を書いても 表示されていてもされていなくても同じ実行がされてしました。 if(XXX.hidden&&!YYY.hidden){ 処理1}else{ 処理2} 表示されていた場合[処理2]が実行されますelseは条件以外の場合なので A if(XXX.hidden&&!YYY.hidden){ 処理1}else{ 処理2} B if(ZZZ.hidden&&!VVV.hidden){ 処理3}else{ 処理4} としたときXXXとYYYが表示されているのに[処理4]が実行されてしまいます もしここに C if(TTT.hidden&&!RRR.hidden){ 処理5}else{ 処理6} が追加されたらXXXとYYYが表示されているのに[処理6]が実行されてしまいます どうすればよいでしょうか?

専門家に質問してみよう