PowerShellで入力要求されたテキストボックスに何も文字を入れない状態でOKを押してもifブロックが実行されてしまう

このQ&Aのポイント
  • PowerShellでテキストボックスに何も文字を入れない状態でOKを押したときにifブロックが実行されてしまう問題が発生しています。
  • 試行1および試行2を行いましたが、両方ともifブロックが実行されてしまいます。
  • 原因がわからず困っており、解決策を教えていただきたいです。
回答を見る
  • ベストアンサー

結果が必ずTrueになってしまいます。

以下のようなソースを PowerShell(Windows7環境)で実行しましたが、目的どおり動作せず困っております。 目的として、 「入力要求された、テキストボックスに何も文字を入れない状態でOKを押したときは、ifブロックを走らない」 ということが行いたいのです。しかし、試行1、2試してみたところ 両方、ifブロックを走ってしまいます。 試行1.テキストボックスに何も入れない状態(=そのままOKボタンを押す。) 試行2.テキストボックスに、"aaa"と入力。(=入力後OKボタンを押す。) 必ずif文で、True結果が返っており、 どなたか、原因がわかる方がいらっしゃいましたら ご教授のほうよろしくお願いできないでしょうか。 <ここよりソース> $inChar = Read-Host "文字を入力して下しさい。" #if文入る前に、何が入っているのか確認するために2行で見てみました。 $result=$inChar -ne $null echo $result if($inChar -ne $null){ $inChar=","+ $inChar echo "ifブロック" } echo $inChar ・試行1結果  True  ifブロック  ,aaa ・試行2結果  True  ifブロック  ,  

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

  • ベストアンサー
回答No.3

#2訂正。 $nullc → $null (単なるタイプミス) ×(型が決定されたことで、型の初期値になる) ○String型の初期値はnull。ブログの通り、戻り値がStringにキャストされた結果、空文字列が代入される。

kureakai
質問者

お礼

教えていただいた内容でなんとかなりました。 ご教授ありがとうございました。

その他の回答 (2)

回答No.2

何も入力せずにOKをおした場合は$nullじゃなくて空文字列、つまり[String]::Empty あるいは 文字列リテラル "" つまり [System.String]$inChar = Read-Host "文字を入力して下しさい。" [System.Console]::WriteLine(($inChar -ne [System.String]::Empty).ToString()); [System.Console]::WriteLine(($inChar -ne $nullc).ToString()); これで入力した時と入力しなかった時を試してみるとわかるかと。 オマケ(型が決定されたことで、型の初期値になる): http://weblogs.asp.net/soever/archive/2006/12/10/powershell-null-and-argument-types.aspx

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

長さが0なら入力無しと言うように $null で判断せず、文字列の長さで判断すれば?

関連するQ&A

  • 検索結果表示について

    こんにちは。お世話になっております。 あるテーブルからの検索結果をPHPにてブラウザ上に表示させる際のコードに関しての質問なのですが、これまで、検索したいレコードが1つである事を条件にした場合、以下のコードのどちらが適切なのでしょうか? if($rows==1){ while($row = mysql_fetch_array($result))   ・   ・ echo $row["id"]; または、 if($rows ==1){ $id = mysql_result($result, 0, "id"); echo $id; どちらもブラウザでは同じ結果が返ってくるかと思われますが、諸先輩方々からのアドバイスを頂ければと、投函させて頂きました。 お忙しい中恐縮ですが宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • EXCEL VBAで・・・。

    テキストボックス34に入力した値を、ExcelのA列の値より検索し その隣の値をテキストボックス4に表示させる、と言う処理をしています。 検索時に検索データが見当たらない場合、メッセージボックスを表示し、 更に、テキストボックス34のデータを消去→テキストボックス34にフォーカス移動 させたいのです。 下記のコードですと、メッセージボックス表示と テキストボックス34のデータ消去までは出来るのですが フォーカス移動してくれません。 イベントをexitにしている理由は特にないのですが、changeを使うと、 テキストボックス34に1文字入力された時点でメッセージボックスが表示されたり、 1文字でも一致するデータが順に表示されてしまいます。 (テキストボックス34に入力するデータの文字数は3文字固定です。) 何か良いお知恵がありましたら、お教え下さい。 ----------------------------------------------------------- Private Sub Textbox34_exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Result As Variant Set Result = Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True) If Result Is Nothing Then MsgBox ("入力されたコードは登録されていません。") TextBox34.Text = "" TextBox34.SetFocus Else Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True).Activate ActiveCell.Offset(0, 1).Select TextBox4.Text = ActiveCell.Value End If End Sub

  • ACCESS 値の代入

    テキストボックスの値の代入をさせたい下記 例1 Aのテキストボックス Is not Null Bのテキストボックス null 結果 Cのテキストボックス OK 例2 Aのテキストボックス null Bのテキストボックス null 結果 Cのテキストボックス NG 例3 Aのテキストボックス Is not Null Bのテキストボックス Is not Null 結果 Cのテキストボックス NG

  • データベース表示結果のデザイン

    データベースの全件検索結果の表示のデザインをしたいと考えているのですがうまくいきません。 PHPのソースは以下の通りです。 <?php mysql_connect('localhost','root','******'); mysql_select_db('AAAAAAAA'); $sql= "select * from ??????"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo " <br />"; echo $row["title"]; echo " "; echo $row["A"]; echo "-"; echo $row["B"]; echo " "; echo $row["C"]; echo " "; echo $row["D"]; echo " "; echo $row["E"]; echo " "; echo $row["F"]; echo " "; echo $row["G"]; echo "</p><hr />"; } } ?> この検索結果の1つ1つのデータをテーブルで囲んでechoで呼び出したA~Gまでの項目を<tr>や<td>で区切って表のような形にしたいのですがどのようにすればいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mail()関数の値がtrueしか返ってこないです

    PHP初心者です PHPに関する質問なのですが メールフォームにメールアドレスを入力して送信すると メールが返信されるスクリプトを作成中 <?php if (mail($_POST["mail"],'test','test@xxx.ne.jp') echo "メールを送信できました"; else echo "メールを送信できませんでした"; ?> という風なソースを書いて実行しました メールアドレスを正しく入力して送信するとちゃんと メールが届きます、それは当然なのですが たとえば適当な文字の羅列 (例:f所亜ジョあじょgじゃおじょあじょじょあ) こんな文字をフォームに入力して送信しても if構文が正常に動作せず、"メールが送信できました" と表示されます、これはifの条件の値がTRUEしか 返ってきてないということなのでしょうか? また、このif構文を正常に動作させるにはどうしたら いいでしょうか?教えてもらえるとありがたいです・・・・

    • 締切済み
    • PHP
  • 計算結果をPOSTするには?

    お世話になります。 $array_sale_price1=array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max=max($array_sale_price1); $sale_price1_true1=$sale_price1_max * $row["profit1"]; $sale_price1_true=ceil($sale_price1_true1); $sale_price1_true1_not_stock_name=$row["buy_price"] * $row["profit1"]; $sale_price1_true_not_stock_name=ceil($sale_price1_true1_not_stock_name); if (empty($row["stock1_name"]) and empty($row["stock2_name"]) and empty($row["stock3_name"])) { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true_not_stock_name"; echo "\">"; echo"<p>"; echo "$sale_price1_true_not_stock_name"; echo"</p>"; echo"</div>"; } else { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true"; echo "\">"; echo"<p>"; echo "$sale_price1_true"; echo"</p>"; echo"</div>"; } $stock1_price_null=0; if (empty($row["stock1_name"])) { echo"<div class='stock_contents_case1'>"; echo "<input type = \"hidden\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price_null"]; echo "\">"; echo"<p>"; echo "---"; echo"</p>"; echo"</div>"; } else { echo"<div class='stock_contents_case1'>"; echo "<input type = \"text\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price"]; echo "\" style='width:25px'>"; echo"</div>"; } 中略 //利幅1の設定 echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1[$row[item_id]]\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; 中略 While文でデータを取得し、配列でデータを渡すことでデータを一括して更新するフォームを作っています。上記のソースような形で、sale_price1を他のデータ(stock1_price stock2_price stock3_price profit1)から計算して求めるフォームを作っているのですが、ボタンを一度押しただけではstock1_price stock2_price stock3_price profit1は更新されますが、計算結果が入るべきデータ(sale_price1)が更新されず、もう1回ボタンを押すと計算結果のデータがMySQLに格納されます。 よくよく考えて見れば、1回目にボタンを押した段階では計算結果(sale_price1)は修正前のstock1_price stock2_price stock3_price profit1で計算された計算結果(sale_price1)がポストされているので修正後の計算結果(sale_price1)がMySQLに格納されないという事が判明したのですが、修正後の値(フォームに新規に入力した値)から計算された値をPOSTするには、どうしたらよいのでしょうか? 色々な事を試してみたのですが、どうもうまくいきません。ご教授いただけましたら幸いです。よろしくお願いします。

    • 締切済み
    • PHP
  • どうすればresponseText結果を配列に格納できますか?

    どうすればresponseText結果を配列に格納できますか? javascript初心者同然のものです。 今サーバー上にあるテキストファイル(10列*4行)をjavascriptで読み込み、各行を異なる一次配列に格納したいと思ってますが、。 例えば以下のように構成できればと思います。 function loadTextFile() { httpObj = createXMLHttpRequest(storeData); if (httpObj) { httpObj.open("GET", path, true); httpObj.send(null); } } // 読み込んだファイルを格納 function storeData() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { var result = httpObj.responsetext.split("\t"); ---> ここにループで配列に格納したい } }

  • 検索結果を非連結のテキストボックスに表示させるには

    accessでシステム開発しています。初心者です。 検索結果を非連結のテキストボックスに表示させる方法を教えてください。 条件(1) フォームのレコードはどのテーブルとも紐づいていない 条件(2) 2つのテーブルから1つの検索ボタンで検索できるようにしたい テーブルA;案件マスタ テーブルB:リソースマスタ ・検索テキストボックス(1つ) ・検索ボタン(1つ) 条件(3) 案件ID、リソースIDはともに数値型です。 検索結果表示テキストボックス(非連結) ・案件IDテキストボックス:案件マスタより検索した案件IDを表示する ・リソースIDテキストボックス:リソースマスタより検索したリソースIDを表示する 下記のように考えていますが ・非連結のテキストボックスに検索結果を表示させる ・1つの検索ボタンで2つのテーブルから検索ができるようにする 方法がわかりません。 どのようなコードを追記したらいいのか教えていただけないでしょうか。 よろしくお願いいたします。 Private Sub btn検索ID_Click() Dim strFilter As String Me![案件マスタ].SetFocus If Me!案件IDテキスト = Me![案件マスタ]![案件ID] Then strFilter = " AND 案件ID= " & Me!案件IDテキスト End If If Me!テキストリソースID = Me![リソースマスタ]![リソースID] Then strFilter = strFilter & " AND リソースID= " & Me!リソースIDテキスト End If ’↓?いらないかも.. 'Forms!ID検索.Filter = Mid(strFilter, 6) Forms!ID検索.FilterOn = True Me.案件IDテキストボックス= Null Me.リソースIDテキストボックス = Null

  • PHPで使うis_null()関数

    PHP学習者です。 is_null() 関数の使い方で混乱しています。 添付の様な<form>を持つファイル nulltest.php と、それを受けて入力が nullかどうかを検証するファイルreceivee.php を作りました。 入力に何かを入れても、なにも入れなくてもis_null()は何も返しません、というか、False を返しているのだと思います。 逆に、!is_null() と否定形にすると、入力があっても無くても1,つまりtrue が返ります。 入力があれば true が返り、入力が無ければ false が返るようにするにはどうしたらよいのでしょうか?詳しい方どうか教えてください。 上記自作のファイルを以下にコピーします。 <?php echo "------------- nulltest.php ----------------</br>"; $no=null; echo "<form method='post' action='receive.php'>"; echo "<input type='text' name='testinput' value=".$no.">"; echo "<input type='submit' value='ok'>"; echo "</form>"; ?> <?php echo "------------- receive.php ------------------</br>"; $input=$_POST['testinput']; echo "======== ".$input." is ".is_null(input)."</br>"; ?>

    • ベストアンサー
    • PHP
  • Accessでのvbaについての質問

    Accessでのvbaを使用したプログラムについてお聞きしたいです。前にも似たようなことを質問していましたが、まだうまくいってません。マスタメンテナンス画面を作成しているのですがテキストボックスの入力チェック が上手くいきません。テキストボックス はコードという名前をつけています。 以下のコードでコーディングしています。 未入力チェック関数 Public Function EmptyCheck(Koumoku As Variant) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then EmptyCheck = True Else EmptyCheck = False End If End Function 桁数チェック関数 Public Function NumberCheck(Koumoku As Variant, Number As Integer) As Boolean If Len(Koumoku) <>Number Then NumberCheck = True Else NumberCheck = False End If End Function 半角英数字チェック関数 Public Function ZokuseiCheck(Koumoku As Variant) As Boolean If IsNumeric(Koumoku) = False And Not Koumoku Like "[a-z]*"And Len(Koumoku) <>6 Then ZokuseiCheck = True Else ZokuseiCheck = False End If End Function コード処理 Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ' If EmptyCheck(コード) = True Then MsgBox "コードを入力してください。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf NumberCheck(コード, 6) = True Then MsgBox "コードの桁数が不正です。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf ZokuseiCheck(コード) = True Then MsgBox "コードの属性が不正です。" コード.SetFocus KeyCode = 0 Exit Sub Else コード.Locked = True End If End If 上手くいかない点は以下の通りです。 1、テキストボックス(コード)の未入力チェックが上手く行きません。テキストボックスが空白の時も""になったりNullになったり変わるのでIf Koumoku = ""ThenにしてしまうとNullになった時処理されずそのまま次のテキストボックスにカーソルが移ってしまう時があります。なんでNullになったり""になったりで変わるのかも謎です。あと空白の時、Koumoku=""で一致しているにも関わらず、Falseで返されてしまい、未入力処理がされません。IsNullを使ってNull値判定してもKoumoku=Nullで一致してるのにFalseで返されました。 2、桁数チェックも上手く行きません。コード処理の方で桁数チェック関数に6という数字を渡して6桁入力としているのですが6桁でもエラーになってしまう時があります。LEN関数でどのように文字数を測っているのかも よくわからないです。 3.これは単純に半角英数字の判定の仕方が間違っているんだと思いますが、やり方がよく分からず、上手く判定できません。 4.これは入力チェックに当てはまるのですがEnterキーを押した時に処理するようにコードを書いていましたが変な結果が出ます。最初にテキストボックスでEnterキーを押して未入力の時に、「コードを入力してください。」とメッセージが出るのはいいのですがその後入力してもまた同じメッセージが出てきます。ほかのテキストボックスをクリックしてカーソルを移さないと同じメッセージが出続けます。桁数や半角英数字チェックの時も同じです。他のカーソルをクリックしないと次の項目のチェックにいかず、同じエラーメッセージが出続けます。何とかほかのカーソルに移さずに修正したら正しく処理が通るようにできないでしょうか。 5、最後に何も問題なかったらテキストボックスにロックかけるよう処理をしているのですが「コントロールの変更を保存していないときはコントロールをロックできません」というエラーメッセージが出てくる時があります。意味が分からず調べても出てこなかったので意味のわかる方何が悪くてエラーになっているのか教えて下さい。 調べてもデバッグしても原因が分からないものばかりです。 長文になってしまいましたがわかる方よろしくお願いします。

専門家に質問してみよう