字符串值不是空的但不能用它做任何事情? VB.net

时间:2013-09-20 14:30:52

标签: vb.net

嗨,这真是令人困惑,我确信它很简单,但我无法弄清楚为什么会发生这种情况。

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

我有价值,因为我可以msgbox出来。当我将鼠标悬停在OraContents字符串上时,它会显示“版本是10.2.0.5.0”这是正确的。

所以有一些msgbox来测试将要删除的东西......

问题是当我在这个例子中尝试并喜欢将OraContents写入主文件片段中的文件时..它表示Null和错误,即使我有一个分配给OraContents的值 - 或者我试过简单地说下面的内容。 ..

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)