从文本文件中读取消息并显示在 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
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什么都没有,或者它对 =
之后的所有内容都做了一个子字符串,并用换行符
直接 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