文本框地狱 - 删除3行,跳过1,重复

时间:2009-10-22 18:17:21

标签: vb.net vb6

我有一个文本框,如下所示:

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

如何使用VB循环文本框,删除第1,2和3行,跳过第四行,然后重复?或者更确切地说,将每四行记录到一个新的文本区域中?

谢谢!我迷路了!

4 个答案:

答案 0 :(得分:3)

我可能会获取内容,在换行符上拆分以创建一个字符串数组(每行一个字符串),然后遍历数组,只输出我想要的数组。

答案 1 :(得分:1)

如果 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)

答案 2 :(得分:0)

这是上一个答案的代码。

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

答案 3 :(得分:0)

如果这是VB.Net并且你使用的是文本框 - 你不需要自己拆分。您只需访问.Lines属性即可。你会得到一个字符串数组

你当然可以像其他人一样展示行;但另一种方法是使用LINQ为你做这项工作。

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

你在这里说的是你希望文本框中的行等于文本框中已有的所有行 - 只要该特定行的索引除以4的余数为3。

当你输入它时听起来很复杂,但实际上,它所要做的就是给你第四行,并将其重新设置到文本框中。