-1

嗨,这真的让我感到困惑,我确信它很简单,但我无法弄清楚它为什么会发生。

我正在阅读一个文本文件并找到一个 startpos 和 endpos 来提取数据。我提取的数据是 - “版本是 10.2.0.5.0”

我有价值,因为我可以将其通过 msgbox 输出。调试时,如果我将鼠标悬停在 OraContents 字符串上,它会显示“版本为 10.2.0.5.0”,这是正确的。

所以有一些 msgboxes 来测试将被删除的东西......

问题是当我尝试在此示例中像在主代码片段中一样将 OraContents 写入文件时.. 即使我为 OraContents 分配了一个值,它也会显示 Null 和错误 - 或者我尝试简单地说以下内容......

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

再次忽略它只是跳过它的 If 语句,因为 OraContents 不匹配该值,但它是!

我错过了什么...:\

提前致谢。

我的代码..

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

在您的字符串内容(32 118 101 114 115 105 111 110 32 105 115 32 49 48 46 50 46 48 46 53 46 48 13)中,最后一个字符“13”是一个新行,在打印时无法真正看到。在comapring之前尝试修剪你的字符串。

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

或者得到最后一个字符

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 回答
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 回答