Прочитать сообщение из текстового файла и отобразить в окне сообщения в vb.net - PullRequest
0 голосов
/ 02 апреля 2020

JavaError.128 = "Не удалось создать проект. & VbLf & Пожалуйста, попробуйте еще раз, и если проблема не исчезнет, ​​обратитесь к администратору"

Я могу прочитать это сообщение из текстового файла. проблема vbLf не рассматривается как перевод строки в msgbox. он печатает vbLf в msgbox.

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

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете сделать весь свой код более простой однострочной версией, используя 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

Если вы не хотите, чтобы все строки, а только только первые:

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 (?) и пропускает ли подстроку, если это было Nothing, или после = он создает подстроку и заменяет 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
    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 & с пробелом на каждом конце, чтобы избежать появления случайных пробелов - если иногда в вашем файле их нет, рассмотрите возможность использования Regex для замены, например, Regex.Replace(line, " ?& vbLf & ?", Environment.NewLine

0 голосов
/ 02 апреля 2020

Это может работать:

 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)
...