vb. net readalllines заполнить форму заменить определенные строки рекомендации по кодированию - PullRequest
0 голосов
/ 07 января 2020

То, что я пытаюсь выполнить sh, - это чтение текстового файла и выбор определенных строк для изменения путем заполнения текста из второй формы. Вот пример кода, который я сейчас использую. Что происходит, я ищу строку, которая начинается с 718, а затем где-то после этой строки будет строка, которая начинается с 720. Мне нужно обе строки, чтобы заполнить вторую форму. Единственный способ, о котором я могу думать, это просто добавлять 1 к строке, пока она не достигнет нужной мне строки. Я все еще новичок в этом, и я уверен, что есть более простой способ сделать это, возможно, с помощью Try или While, но я не уверен как. Цени любую помощь.

Dim lines() As String = File.ReadAllLines(tempsave)
For i As Integer = 0 To lines.Length - 1
If lines(i).StartsWith("718") Then
  If lines(i + 1).StartsWith("720") Then
       Dim array() As String = lines(i).Split("*"c, "~"c)
       Dim array2() As String = lines(i + 1).Split("*"c, "~"c)
       FormFill.TextBox1.Text = array(3)
       FormFill.TextBox2.Text = array(9)
       FormFill.ShowDialog()
       lines(i) = lines(i).Replace(array(3), FormFill.TextBox1.Text)
       lines(i + 1) = lines(i + 1).Replace(array(9), FormFill.TextBox2.Text)
  Else
       If lines(i + 2).StartsWith("720") Then
           Dim array() As String = lines(i).Split("*"c, "~"c)
           Dim array2() As String = lines(i + 2).Split("*"c, "~"c)
           FormFill.TextBox1.Text = array(3)
           FormFill.TextBox2.Text = array(9)
           FormFill.ShowDialog()
              lines(i) = lines(i).Replace(array2(3),FormFill.TextBox1.Text)
              lines(i + 2) = lines(i + 2).Replace(array(9), FormFill.TextBox2.Text)
       End If
   End If
End If
Next

Пример данных:

Input:
123*test*test*test~
718*test*test*test~
543*test*test*test~
720*test*test*test~

Output:
123*test*test*test~
718*test*test*newdata~
543*test*test*test~
720*test*test*newdata~

1 Ответ

1 голос
/ 07 января 2020

Вот, попробуйте это:

Public Sub Lines()
  Dim _
    aNextLines,
    aAllLines As String()

  Dim _
    s718Line,
    s720Line As String

  aAllLines = IO.File.ReadAllLines("D:\Logs\Data.log")

  For i As Integer = 0 To aAllLines.Length - 1
    If aAllLines(i).StartsWith("718") Then
      s718Line = aAllLines(i)
      aNextLines = aAllLines.Skip(i + 1).ToArray
      s720Line = aNextLines.FirstOrDefault(Function(Line) Line.StartsWith("720"))

      ' Process data here

    End If
  Next
End Sub

- ОБНОВЛЕНИЕ -

Вот измененная версия, которая читает и пишет:

Public Sub Lines()
  Dim oForm As FormFill

  Dim _
    aNextLines,
    aAllLines As String()

  Dim _
    i718Index,
    i720Index As Integer

  Dim _
    s718Line,
    s720Line As String

  oForm = New FormFill

  aAllLines = IO.File.ReadAllLines(oForm.FilePath)
  s718Line = String.Empty
  s720Line = String.Empty

  For i718Index = 0 To aAllLines.Length - 1
    If aAllLines(i718Index).StartsWith("718") Then
      s718Line = aAllLines(i718Index)
      aNextLines = aAllLines.Skip(i718Index + 1).ToArray

      For i720Index = 0 To aNextLines.Length - 1
        If aNextLines(i720Index).StartsWith("720") Then
          s720Line = aNextLines(i720Index)

          Exit For ' Assumes only one 720 line in the file
        End If
      Next

      Exit For ' Assumes only one 718 line in the file
    End If
  Next

  oForm.TextBox718.Text = s718Line
  oForm.TextBox720.Text = s720Line

  oForm.TextBox718.Tag = i718Index
  oForm.TextBox720.Tag = i720Index
End Sub

Теперь в обработчике событий Click вашей кнопки Сохранить:

Private Sub SaveButton_Click(Sender As Button, e As EventArgs) Handles SaveButton.Click
  Dim aAllLines As String()

  Dim _
    i718Index,
    i720Index As Integer

  Dim _
    s718Line,
    s720Line As String

  s718Line = Me.TextBox718.Text
  s720Line = Me.TextBox720.Text

  i718Index = Me.TextBox718.Tag
  i720Index = Me.TextBox720.Tag

  aAllLines = IO.File.ReadAllLines(Me.FilePath)

  aAllLines(i718Index) = s718Line
  aAllLines(i720Index) = s720Line

  IO.File.WriteAllLines(Me.FilePath, aAllLines)
End Sub

Это должно сделать это.

...