拆分数组并读取到特定行

时间:2017-01-30 10:28:51

标签: string vb.net textbox

我有一个来自同事的自编的简报发送工具,它在发送这样的电子邮件之后将文本文件写为日志:

Count of emails to send: 10
Count of sent emails: 10
<German> Sender: infotest@test.de Header: New Newsletter 01/2017, file: C:\temp\raw_newsletter_htm_german.htm
1. (30.01.2017 10:28:45) ------ testadress1@test.de
4. (30.01.2017 10:28:46) ------ testadress2@test.de
5. (30.01.2017 10:28:47) ------ testadress3@test.de
9. (30.01.2017 10:28:47) ------ testadress4@test.de
10. (30.01.2017 10:28:47) ------ testadress5@test.de
<English> Sender: infotest@test.de Header: New Newsletter 01/2017, file: C:\temp\raw_newsletter_htm_english.htm
2. (30.01.2017 10:28:46) ------ testadress6@test.de
3. (30.01.2017 10:28:46) ------ testadress7@test.de
6. (30.01.2017 10:28:47) ------ testadress8@test.de
7. (30.01.2017 10:28:47) ------ testadress9@test.de
8. (30.01.2017 10:28:47) ------ testadress10@test.de

现在我的问题:如何按语言拆分日志并将其写入2个不同的文本框?我尝试了以下内容,只检查该行是否包含“------”,因为这些是我需要的唯一行。但我不知道,我怎么能用语言来分割它们。

Private Sub readlog_Click(sender As Object, e As EventArgs) Handles readlog.Click
    Dim text As String() = File.ReadAllLines("C:\temp\log_01_2017.txt")
    TextBox1.Text = ""

    Dim entries As String = ""
    For Each line In text
        If line.Contains("------") Then
            entries += vbNewLine & line
        End If
    Next
    TextBox1.Text = entries
End Sub

我考虑过类似line.contains("<German>")的内容,然后忽略第一行,因为它是发送者/标题/文件行,读到line.contains("<English>")然后再用英语重新开始。但我不知道如何将其写为代码。

提前致谢

1 个答案:

答案 0 :(得分:1)

在这段代码中,我使用了RichTextBoxes,因此结果更容易看到。基本上它遍历文件的每一行。

如果找到包含“Sender:”的行,则它将RichTextBox对象设置为目标,具体取决于在&lt;之间找到的国家/地区。和&gt;符号。

如果找到包含“------”的行,则该行将添加到上次选择的目的地。

这应该指向正确的方向

   Dim txt As String() = File.ReadAllLines("C:\temp\log_01_2017.txt")
    RichTextBox1.Clear()
    RichTextBox2.Clear()
    For Each ln As String In txt
        Dim country As String
        Dim entries As String = ""
        Dim destinationTextbox As RichTextBox
        Select Case True
            Case ln.Contains("Sender:")
                country = Split(ln, ">")(0).TrimStart("<")
                If country = "German" Then
                    destinationTextbox = RichTextBox1
                ElseIf country = "English" Then
                    destinationTextbox = RichTextBox2
                End If
            Case ln.Contains("------")
                destinationTextbox.Text = destinationTextbox.Text & ln & vbCrLf
        End Select