• ベストアンサー

 IF文 教えて下さい。

例 if (($in{'pre'} ne "0") && ($in{'pre'} ne "-1")) { 不要なoptin valueを 0と-1。必要が1-47。 value="1" から value="47" までを真にしたいのですが 例を簡単にするには [1-47] 1< とかどう書けば良いのでしょう?・・・ -------------------------------------------- if ($in{'nam'} && $in{'tel'} && ($in{'pre'} ne "0") && ($in{'pre'} ne "-1") && $in{'add'}) { 今はこんな感じでやってるのです・・・ 全部揃ったら真って感じです。条件文が毎回長くなってw(≧m≦)w

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

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

  • ベストアンサー
  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.2

条件文を長くするのは確かに読みづらくなりますよね。 エラーをカウントする変数 $error_count のようなものを用意し、 エラーの場合には、$error_count++ のようにカウントアップしておいて、最終的にこれが 0か、1以上かを調べてエラー処理させると、すっきります。 if ( $in{'nam'} eq '' ) { $error_count++ } if ( $in{'tel'} eq '' ) { $error_count++ } if ( $in{'pre'} < 1 || $in{'pre'} > 47 ) { $error_count++ } if ( $in{'add'} eq '' ) { $error_count++ } if ( $error_count > 0 ) { # エラー }else{ # 問題なし }

takumana20
質問者

お礼

エラーページはあるので そこにエラーの場合を追加したかったのです。 そして逆の真のパターンなら 確認テーブルを表示したかったのです。 不等号で解決しました。ありがとうございました。

その他の回答 (1)

  • snowize
  • ベストアンサー率27% (68/245)
回答No.1

連番でしたら不等号を使う。 不規則でしたらリストにあらかじめ値を入れてテーブルとして用いるか、switch文を用いる。 質問がよく分からないのですが、今回は前者で構いませんような。

takumana20
質問者

お礼

質問が??でごめんなさい! どう説明していいのか・・・peal初心者ですw 連番なのですが不等号で解決しましたありがとうございました。

関連するQ&A

  • perl if文 助けて~

    perl初心者ながら暇見て住所CGIフォームを作っています。 だんだん完成してきましたが今一歩です(T_T)ご指導下さい! 名前、電話、都道府県、住所、の4つの項目があります。 {'nam'} {'tel'} {'pre'} {'add'} {'pre'}はSELECToption 他はtextFORM 全部記入した時には、次に進めてOKなのです。 if ((($in{'nam'}) && ($in{'tel'}) && ($in{'add'}) && ($in{'pre'} > "0")) { print 全部未記入時でも、次に進んでも無記入なのでOKです。 エラー時に&errorのエラー画面に飛ばす事も出来ました。 ただ、書き忘れ時が困るので {'nam'} {'tel'} {'pre'} {'add'}の内、1~3つとか記入して 他が抜けてたりした時だけエラーにしたいのです。 でも間違って空スペースとかでエラーが出て欲しくないし・・・ まずは下記でやってもまだダメです、($in{'pre'} > "0")が未選択時がダメです(T_T) 色々やってみたのですが、何か良い方法ありませんか? #### ($in{'pre'} > "0")は、"1"以上が「真」の条件です。 if ((($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "")) && ($in{'pre'} > "0")) { &error("エラー"); }

    • ベストアンサー
    • Perl
  • if 文  わかんない・・・

    都道府県セレクトoptionフォームにて 都道府県を選択しない場合のエラーを なんとか2行で出せるようになったのですが 選択して下さい = value="0" if ($in{'pre'} eq '0') { &error("都道府県の選択!!"); } if ($in{'pre'} eq "") { &error("都道府県の選択!!"); } これを1行にするにはどうしたらいいのでしょう? ↓↓はダメでした(≧m≦) if ($in{'pre'} eq "" || '0') { &error("都道府県を選択!!"); }

    • ベストアンサー
    • Perl
  • if文について

    if文を利用してリストの表示をしようとしています。 ドロップダウンリストは <SELECT name="type"> <OPTION value="all">指定しない </OPTION> <OPTION value="1">タイプA系列</OPTION> <OPTION value="2">タイプB系列</OPTION> となっています。 データはチェックボックスで1か空白で保存されていて、A系列は「s_1」「s_2」、B系列は「s_3」「s_4」「s_5」にチェックが入っているかどうかを振り分けしたいんです。 なので、ドロップダウンリストで「タイプA系列」を選択したら「s_1」「s_2」に1が入っている物のみ表示するというものです。 現在のところこの形です。 if ($FORM{'type'} ne 'all') { if ($FORM{'type'} eq '1'){ if ($s_7 || $s_8 eq 1) { ; } else { next; } }else{ if ($s_9 || $s_10 || $s_11 eq 1) { ; } else { next; } } } このようにやってみましたが全部表示されてしまいます。 どのように直したらOKでしょうか? お願いします。

    • ベストアンサー
    • Perl
  • if文を使って…。

    if文を使って、 NAME:○○(0v0) HP:200 MP:100 ------------------------ NAME:××(><) HP:5 MP:20 って表示するようにしたいのですがどのように入力すればいいのでしょうか? ちなみに顔文字は残りのHPによって変化するようにしたいのです。 (例)HP:0~9は(><) 10~100は(-_-) 101~500は(0v0)  501~1000は(^^)てな感じで…。 どうかお願いします。 

  • IF文の別の使い方?

    タイトルはどうすればいいか現状ではよく分かりませんが、 最近PHPとJSを勉強しはじめました。 そして、覚えた順番が悪かったのかPHPとの仕様が違い、 PHPを書いていて、Perlでこれを使えないかなぁと思ったので質問したしました。 PHPでは<? if ($inputType == $val["id"]) { echo ' selected="selected"'; } ?> などとHTMLタグの中に記述が可能ですが、 私が考える限り、perlではHTMLタグの中に記述するには printを終了させてIF文を作り、またprintを記述すると 非常に手間が掛かります 例: print '<input type="submit" value="確認"'; if(~略~){print"disabled";} print">"; といった感じでしょうか? 余りにも手間が要るのでJSでdisabled化していますが、 PerlでもPHPのように簡単にHTMLタグの中に記述できないでしょうか?

    • ベストアンサー
    • CGI
  • if文がifにならない?

    よろしくお願いします。 連続投稿防止の為に、getenvで取得したIPアドレスと time()で取得した時間をcsvファイルに xxx.xxx.xxx.xxx<>1249494949 xxx.xxx.xxx.xxx<>1249494949 という風に記述をしてます。 具体的には、 <?php $ipdesu = "./ip.csv"; $ipgetdesu = getenv( "REMOTE_ADDR"); $times = time(); $hoge = 0; $roop_open = fopen( $ipdesu, "r"); while(! feof($roop_open)){ $roop_get = fgets( $roop_open); $roop_ex = explode( "<>", $roop_get); $hogehoge = $hoge++; //IPチェック if( in_array( $ipgetdesu, $roop_ex)){ echo "配列検索TRUE"; //時間チェック if ( "60" < $times - $roop_ex[1]){ $fp = file( $ipdesu); unset( $fp[$hogehoge]); $fp_open = fopen( $ipdesu, "w"); foreach ( $fp as $value){ fputs( $fp_open, $value); } fclose( $fp_open); }else{ echo "連投規制"; } }else{ $fal_open = fopen( $ipdesu, "a"); fputs( $fal_open, $ipgetdesu."<>".time()."\n"); fclose( $fal_open); echo "配列検索FALSE"; } } fclose( $roop_open); ?> と記述しています。 <まだ、始めたばかりなのでロック制限とかしてませんがそこはご勘弁を 上記を実行すると、if ここ else そこ の本来、真であれば「ここ」が 偽であれば「そこ」だけが実行されると思っていたのですが、 上記の実行結果は、「ここ」も「そこ」も実行されてしまい かつ、IPを記述したファイルの検索が2回め実行した時に 同じIP 127.0.0.1<>時間 127.0.0.1<>時間 とローカルで試してるのでIPが変更になるはずないのですが(DHCPは念の為しようしていません in_arrayでヒットしないのは何故でしょうか? また、ifが正しく動作しないのは多重ifとでも言えばいいのでしょうか? が悪いからでしょうか。 つたないソースで申し訳ないですが、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • if文を使用すると表示されません。

    フォームに年月日を入力してもらい、下記のスクリプトで 入力画面を表示させようとしています。 年月日を入力するフォームにはhiddenをいれ、if文でサブルーチン &newFormを表示させようとしているのですが、うまくいきません。 <input type=hidden name=mode value="data"> if文を使用せずに、&newFormを直接呼び込むと表示するのですが・・・。 ぜひご教授願えればと思います。 よろしくお願いします。 ===================================================================== &query; # 初期設定 if($in{'mode'} eq "date"){ &newForm; } sub newForm{ print"Content-type:text/html\n\n"; print <<EOF; <html> <head> <title></title> </head> <body> <textarea name="diary" rows="30" cols="70"></textarea><br> <input type="submit" value="書き込み"> </body> </html> EOF } sub query{ $ENV{'REQUEST_METHOD'}=~ tr/a-z/A-Z/; 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; $in{$name} = $value; } }

    • ベストアンサー
    • CGI
  • if文について

    Excel 2007 VBAを使用しています。 ↓のクリックイベントを実行するとif文のところで不具合があります。 商品シートのC列には、状況が保存されています。 該当した年月、"受取済み"、"注文中"以外の行データをリストさせます。 商品シートのJ列、W列には、該当した年月、"受取済み"、"注文中"以外の行データが存在するのですが、まったく検出してくれません。 対処方法を教えてくれませんか? ------------------------------------------- Option Explicit Private Sub CB1_Click() '変数を定義 Dim i As Long Dim maxRow As Long Dim inSheet As Worksheet Dim outSheet As Worksheet '入出力先のシートをオブジェクト変数へ格納 Set inSheet = Worksheets("商品") Set outSheet = Worksheets("結果") 'テキストボックスの内容を判定 If (Me.TextBox21.Value = "") Or (Not IsDate(Me.TextBox21.Value)) Then MsgBox "日付が入力されていません" Exit Sub End If '最終行番号を取得 maxRow = Me.Cells(Rows.Count, "A").End(xlUp).Row '商品シートの最終行番号で分岐処理 If maxRow > 3 Then '出力先を削除してヘッダーをコピー outSheet.Cells.Delete inSheet.Range("A3").EntireRow.Copy outSheet.Range("A1") Application.CutCopyMode = False Else '4行目以降にデータが入力されていなければメッセージで終了 MsgBox "該当データがありません" Exit Sub End If '4行目から最終行まで繰り返し For i = 4 To maxRow 'J列が日付であれば処理 If IsDate(inSheet.Cells(i, "J").Value) Then '--------機能しない箇所(開始) If Year(inSheet.Cells(i, "J").Value) <= Year(Me.TextBox21.Value) And _ Month(inSheet.Cells(i, "J").Value) <= Month(Me.TextBox21.Value) And _ CStr(inSheet.Cells(i, "W").Value) <> "受取済み" And CStr(inSheet.Cells(i, "W").Value) <> "注文中" Then '--------機能しない箇所(終了) inSheet.Rows(i).Copy outSheet.Rows(cnt + 2) End If End If Next i End Sub

  • VBAでifとかelseとかelseifとかの後に書く文

    VBAでifとかelseとかelseifとかの後に書く文の出力で 現在プログラムを書きました。2行書く場合 たとえば else if 『a』を出力させるプログラム 『b』を出力させるプログラム Sheets("Sheet2").Range("A1").Value = Application.WorksheetFunction.Clean(StrConv(toDateStr(a(0)), vbWide)) Sheets("Sheet2").Range("A2").Value = Application.WorksheetFunction.Clean(StrConv(toDateStr(a(1)), vbWide)) をプログラム書いた場合、実行されるのは『a』を出力させるプログラムだけなのですが、else ifの後は次の1行目しかこのプログラムだと実行できない感じなのでelse ifの中に2行文の内容をいれたいのですが else if()で全部囲めばいいのか? else if{}で全部囲んだりするのか?このような全部ひっくるめられるプログラムはないのでしょうか? お願いします。教えてください

  • エクセル2000のマクロで、if文が想定通りに動かない

    90から93列目にかけて、データが 0又は3~4桁の数字が入っている状態です。 4810,0,0,2430 以下はマクロの抜粋です。 やりたいことは、0でなければ各変数に1を代入し、95列めに合計を入力します。 If Cells(i, 90) <> 0 Then w = 1 If Cells(i, 91) <> 0 Then x = 1 If Cells(i, 92) <> 0 Then y = 1 If Cells(i, 93) <> 0 Then z = 1 Cells(i, 95).Value = w + x + y + z このマクロを実行しますと、実際には0でない列が2列にもかかわらず、95列目に3と入力されてしまいます。1行ずつ実行してみたら、if文の3行目の92列目の判定が変です。 実行中に、カーソルをかざすとCells(1, 92)=0と表示されるのですが、合計を代入するところの y には1が代入されてしまっています。 何か間違っているんだと思いますが、分かりません。よろしくお願いします。

専門家に質問してみよう