Text Box Hell - Удалить 3 строки, Пропустить 1, Повторить - PullRequest
1 голос
/ 22 октября 2009

У меня есть текстовое поле, которое выглядит так:

Line 1
Line 2
Line 3
**Line 4**
Line 1
Line 2
Line 3
**Line 4**
(repeats...)

Как я могу использовать VB для циклического прохождения текстового поля, удаления строк 1, 2 и 3, пропуска четвертого и повторения? Или, скорее, записать каждую четвертую строку в новую текстовую область?

Спасибо! Я ТАК растерялся!

Ответы [ 4 ]

3 голосов
/ 22 октября 2009

Я бы, вероятно, получил содержимое, разделив его на символ новой строки, чтобы создать массив строк (по одной строке на строку), а затем перебрал бы массив, выводя только те, которые я хотел.

1 голос
/ 23 октября 2009

Если это равно VB6, имейте в виду, что тип String переменной длины является ссылочным типом, что означает, что операции будут включать получение глубокой копии, то есть конкатенация дорогая.

  Dim lines() As String
  lines = VBA.Split(TextBox1.Text, vbCrLf)

  Dim counter As Long
  For counter = 3 To UBound(lines) Step 4
    lines(counter) = Chr$(22)
  Next

  TextBox1.Text = _
      Replace$( _
          Replace$( _
              VBA.Join(lines, vbCrLf), _
          vbCrLf & Chr$(22), vbNullString), _
      Chr$(22) & vbCrLf, vbNullString, 1)
0 голосов
/ 24 октября 2009

Если это VB.Net и вы используете текстовое поле - вам не нужно ничего разбивать самостоятельно. Вы можете просто получить доступ к свойству .Lines. Вы получите массив строк

Вы, конечно, можете проходить по строкам, как это показали другие; но другой подход - использовать LINQ, чтобы выполнить эту работу за вас.

        txtBox1.Lines = (From curLine In txtBox1.Lines _
                         Where Array.IndexOf(txtBox1.Lines, curLine) Mod 4 = 3).ToArray

То, что вы здесь говорите, это то, что вы хотите, чтобы строки в текстовом поле были равны всем строкам, уже находящимся в текстовом поле - до тех пор, пока индекс этой конкретной строки, разделенный на 4, имеет остаток от три.

Звучит сложно, когда вы так печатаете, но на самом деле все, что он собирается сделать, это дать вам каждую четвертую строку и вернуть ее обратно в текстовое поле.

0 голосов
/ 22 октября 2009

Это код для предыдущего ответа.

Private Function EveryFourthLine(ByVal input As String) As String
        Dim newtxt As String = ""
        Dim oldtxt As String() = input.Split(vbCrLf)

        For i As Integer = 1 To oldtxt.Count
            If i Mod 4 = 0 Then
                newtxt = newtxt & oldtxt(i - 1)
                If i <> oldtxt.Count Then
                    'add a vbcrlf to all but the last line
                    newtxt = newtxt & vbCrLf
                End If
            End If
        Next

        Return newtxt
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...