-1

こんにちは、これは本当に私を困惑させています。単純だと確信していますが、なぜそれが起こっているのかわかりません。

テキスト ファイルを読み込んで、データを抽出するための startpos と endpos を見つけています。私が抽出しているデータは - 「バージョンは 10.2.0.5.0 です」

私はそれをmsgboxできるので価値があります。そして、OraContents 文字列の上にマウスを置くとデバッグ中に、「バージョンは 10.2.0.5.0」と表示されますが、これは正しいです。

したがって、削除されるものをテストするためのメッセージボックスがいくつかあります...

問題は、この例のように、メイン コード スニペットのように OraContents をファイルに書き込もうとしたときです。OraContents に値が割り当てられていても、Null とエラーが表示されます。または、単に次のように言ってみました...

If OraContents = "version is 10.2.0.5.0" Then
MsgBox("Oracle found")
End If 

OraContents が値と一致しないため、If ステートメントは無視されますが、それはスキップされます。

何が足りないの... : \

前もって感謝します。

私のコード..

Sub GetFiles()

    Dim DirInfo As New DirectoryInfo(ProgramFiles & "Oracle\Inventory\logs")
    For Each file As FileSystemInfo In DirInfo.GetFileSystemInfos()

 Dim myFile = IO.Directory.GetFiles(ProgramFiles & "Oracle\Inventory\logs").OrderByDescending(Function(f) New FileInfo(f).LastWriteTime).First()

        If InStr(file.FullName, "installActions") Then

 MsgBox(myFile)
            Dim testTxt As New StreamReader(myFile)
            Dim allRead As String = testTxt.ReadToEnd()
            testTxt.Close()

 If InStr(allRead, "Oracle Universal Installer") Then

                Dim OraContents As String
                OraContents = allRead

                Dim StartPos, EndPos As Integer
                StartPos = OraContents.IndexOf("INFO: Oracle Universal Installer version is ")
                EndPos = OraContents.IndexOf("INFO: Oracle Universal Installer version is ")
                StartPos = StartPos + 32
                EndPos = EndPos + 55

 OraContents = OraContents.Substring(StartPos, EndPos - StartPos)

MsgBox(OraContents)

                Test(OraContents) 'This is a check to make sure value is not Null..its not

System.IO.File.Create("c:\OracleVersion.txt")
                Dim path As String = "c:\OracleVersion.txt"
                Dim sw As StreamWriter

sw.WriteLine(OraContents)

                sw.Close()

End If

MsgBox("Found")
        Else
            'MsgBox("Not Found")
        End If

    Next

End Sub
4

2 に答える 2

1

文字列の内容をチェックして、隠し文字や予期しない文字がないかどうかを確認します。必要に応じて、定数に対して同じことを行うことができます。

dim s as string
For i As Integer = 0 To Len(OraContents) - 1
  s = s & Asc(OraContents.Chars(i)) & " "
Next i
msgbox(s) ' or debug / watch

OraContents = OraContents.trim文字列の両端にあるスペース、キャリッジ リターン (この場合は 13)、ライン フィードなどを取り除くために使用できます。

ちなみに、文字列がユーザーによって入力されている場合は、大文字と小文字の違いを無視して比較を行いたい場合があります。

if string.compare(OraContents.trim, "Oracle Universal Installer", true) = 0 then
于 2013-09-20T14:38:41.407 に答える
1

文字列の内容 (32 118 101 114 115 105 111 110 32 105 115 32 49 48 46 50 46 48 46 53 46 48 13) では、最後の文字「13」は印刷時に実際には見えない新しい行です。比較する前に、ストリングをトリミングしてみてください。

If OraContents.Trim() = "version is 10.2.0.5.0" Then

または、最後の 1 文字を取得します

OraContents = OraContents.Substring(StartPos, EndPos - StartPos - 1)

長さを印刷することで、常に違いを確認できます

MessageBox.show(OraContents.Length & ":" & "version is 10.2.0.5.0".Length)
于 2013-09-20T17:07:38.707 に答える