none
標準出力をsplitで分割して文字比較 RRS feed

  • 質問

  • 標準出力をsplitで分割して文字比較が何故かできないです。

    lineには上段の処理で"/xxxxx=◯◯"のような行が複数行標準出力から返ってきます。

    4行目や6行目での比較は出来ているのですが、10行目の比較でenvline(1)が「test」になっていて、ブレークで止めてもstr1やstr2の内容がきちんと「test」であるにもかかわらず、条件内の11行目に入りません。

    streamの最終文字に何か不正な文字でも入っているのかとしつこく調べてみたのですが、デバッガ上で示される文字はどうみてもtestの文字が返ってきています。

    何かすごく単純なことのようにも思えますが、どなたかご教授いただければ幸いです。

    よろしくお願いいたします。

    1       Do Until myprocess.StandardOutput.EndOfStream
    2          line = myprocess.StandardOutput.ReadLine
    3           envline = Split(line, "=", -1, CompareMethod.Text)
    4           If envline(0) = "/XXXX" Then
    5               str1 = DirectCast(envline, String())(1) ’str1=envline(1)でも同じ
    6           ElseIf envline(0) = "/YYYY" Then
    7               str2 = String.Copy(envline(1))
    8           End If
    9       Loop
    10      If str1 = "test" Or str2 = "test" Then
    11         Response.Redirect("ErrorPage.aspx")
    12      End If


    2013年9月23日 12:40

回答

すべての返信

  • str1 に test が入っているとき、 str1.Length は 4 になってますか?
    2013年9月23日 13:19
  • galacoさん

    返信ありがとうございます

    確かに+1文字多いです。デバッガで見た見た目は同じに見えました・・

    スペースも見つけられなかったのですが、一応Trimしてみたりもしたりしてますが・・

    とりあええず、1文字多い原因を探ればよさそうです。

    ありがとうございます!!

    2013年9月23日 13:28
  • 改行コードではないですか?
    2013年9月23日 13:36
  • galacoさま

     Dim chArray1 As Char() = str1.ToCharArray() で見てみたところ

    改行コードではなく、おしりに「"」が見えました。

    実は質問以前に Replaceでvbcrlfとvblfを「""」空文字に変換していたりもしたのでしたがダメだったのです・・

    「"」が出力されている理由や「"」がデバッガ上の表示で見えない理由は不明ですが、とりあえず、Leftで取り出したら、思った通りの動作になりました。

    取り急ぎ対処は出来たので助かりました。

    ありがとうございます。

    回答マークは上記のあたりがはっきりしたら付けさせてもらいます。

    よろしくお願いいたします

    2013年9月23日 13:56