从文本文件中读取消息并显示在 vb.net 的消息框中

Read message from text file and display in message box in vb.net

JavaError.128 = "project creation failed. & vbLf & Please try again and if the problem persists then contact the administrator"

我可以从文本文件中读取此消息。问题是 vbLf 在 msgbox 中不被视为换行符。它在 msgbox 中打印 vbLf。

Using sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(errorfilePath)
 While ((sr.Peek() <> -1))
  line = sr.ReadLine
  If line.Trim().StartsWith("JavaError." & output) Then
    isValueFound = True
    Exit While
  End If
 End While
sr.Close()
End Using

If isValueFound Then
Dim strArray As String() = line.Split("="c)
MsgBox(strArray(1).Replace("""", "").Trim({" "c}))
End If

这可行:

 Dim txtFile As String = "project creation failed. & vbLf & Please try again and if the problem persists then contact the administrator"
        Dim arraytext() As String = txtFile.Split("&")
        Dim txtMsgBox As String = Nothing
        For Each row As String In arraytext
            If Trim(row) = "vbLf" Then
                txtMsgBox = txtMsgBox & vbLf
            Else
                txtMsgBox = txtMsgBox & Trim(row)
            End If
        Next
        MsgBox(txtMsgBox)

您可以使用 File.ReadAllLines 和 LINQ 使所有代码成为更简单的一行版本。此代码会将所有以 javaerror 开头的行放入文本框中,而不仅仅是第一行:

textBox.Lines = File.ReadAllLines(errorFilePath) _
    .Where(Function(s) s.Trim().StartsWith("JavaError")) _
    .Select(Function(t) t.Substring(t.IndexOf("= ") + 2).Replace(" & vbLf & ", Environment.NewLine)) _
    .ToArray()

您需要导入 System.IO 和 System.Linq

此代码将文件的所有行读入一个数组,然后使用 LINQ 仅提取以 java 错误开头的行,然后在 = 之后投影所有内容的新字符串vbLf 替换为换行符,将可枚举投影转换为字符串数组并将其分配给文本框行

如果您不想要所有行而只想要第一行:

textBox.Text = File.ReadLines(errorFilePath) _
    .FirstOrDefault(Function(s) s.Trim().StartsWith("JavaError")) _
    ?.Substring(t.IndexOf("= ") + 2).Replace(" & vbLf & ", Environment.NewLine)) 

这个使用 ReadLine 而不是 ReadALLLines - ReadLines 渐进地工作,并且在我们第一次找到它之后能够停止读取而不是有读取所有(百万)行的开销然后结束拉动是有意义的第一个出局并投入了 999,999 行的努力。所以它逐行读取,拉出第一个以 "JavaError" 开头的(如果没有这样的行,则为 Nothing),然后检查 Nothing 是否出来(?),如果有则跳过 Substring什么都没有,或者它对 = 之后的所有内容都做了一个子字符串,并用换行符

替换了 vbLf

直接 mod 您的原始代码:

Using sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(errorfilePath)
 While ((sr.Peek() <> -1))
  line = sr.ReadLine
  If line.Trim().StartsWith("JavaError." & output) Then
    isValueFound = True
    line = line.Replace(" & vbLf & ", Environment.NewLine))
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ added code
    Exit While
  End If
 End While
sr.Close()
End Using

If isValueFound Then
Dim strArray As String() = line.Split("="c)
MsgBox(strArray(1).Replace("""", "").Trim({" "c}))
End If

请注意,我总是在 & vbLf & 上用每一端的 space 进行替换,以避免留下杂散的 space - 如果您的文件有时没有有它们,请考虑使用 Regex 进行替换,例如Regex.Replace(line, " ?& vbLf & ?", Environment.NewLine