0

我有一个成员列表及其统计信息,我需要每 5 行用分隔符将其拆分。它一直持续到 1000+ 行

代码 :

 Dim newString As String = RichTextBox1.Text.Replace(vbCr, ";").Replace(vbLf, ";")

Dim separator As Char = CChar(";")

Dim sArr As String() = newString.Split(separator)
Dim indexOfSplit As Integer = 4

Dim sFinal As String = Join(sArr.Take(indexOfSplit).ToArray, separator) & vbNewLine &
Join(sArr.Skip(indexOfSplit).ToArray, separator)

 RichTextBox2.Text = sFinal

输出 :输出

期望的输出:期望的输出

我的代码的问题是它只为 1 行工作,我需要它是字符串中的所有行

4

2 回答 2

2

RichTextBox具有Lines返回行数组的属性。我用 aStringBuilderRichTextBox2. For循环增加 4 而不是默认的 1 。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ParseRTB()
End Sub
Private Sub ParseRTB()
    Dim lines = RichTextBox1.Lines
    Dim sb As New StringBuilder
    For i = 0 To lines.Count - 4 Step 4
        sb.AppendLine($"{lines(i)};{lines(i + 1)};{lines(i + 2)};{lines(i + 3)}")
    Next
    RichTextBox2.Text = sb.ToString
End Sub
于 2021-09-11T22:56:20.533 回答
1

可以用 LINQ 做到这一点:

RichTextBox1.Lines _
  .Select(Function(s,i) New With { .L = i\4, .S = s }) _
  .GroupBy(Function(a) a.L) _
  .Select(Function(g) string.Join(";"c, g.Select(Function(a) a.S))

这需要 rtb 的行并将它们投影到一个新序列中,该序列包括一个数字,即行号除以 4(因此 Howard 的行得到 0,Roma 的得到 1 等),然后输入按该数字和分组(一组字符串)使用分号连接成一个字符串。

于 2021-09-11T22:57:01.430 回答