在VB.net中编辑后合并两个或多个文本文件

时间:2014-06-02 22:11:11

标签: vb.net openfiledialog savefiledialog

Helo那里!

似乎我在VB.net中遇到了我的代码问题。请耐心等待,因为我是一名完整的编程初学者。我正在尝试编写一个程序,它将加载2个或更多txt文件,查找和排除特定行(从某些字符开始或包含一些字符),然后合并并保存一个文件,其中包含编辑后的所有信息(从所有文件)。

我正在使用openfiledialog,我已将multiselect设置为true。下面是OpenfileDialog的代码:

        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        For Each File In OpenFileDialog1.FileNames
            My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
        Next

如果我是正确的,它会加载文件名并从文件中读取所有文本。对于编辑,我使用以下代码:

        Dim outputLines As New List(Of String)()
    For Each line As String In System.IO.File.ReadLines(OpenFileDialog1.FileName)
        Uline1 = line.StartsWith("text1")
        Uline2 = line.StartsWith("text2")
        Uline3 = line.StartsWith("text3")
        Uline4 = line.StartsWith("text4")
        Uline5 = line.StartsWith("text5")
        Uline6 = line.StartsWith("text7")
        Uline7 = line.StartsWith("sometext")
        Trash = line.Contains("^")

        If Uline1 Or Uline2 Or Uline3 Or Uline4 Or Uline5 Or Uline6 Or Uline7 Or Trash Then
            outputLines.Remove(line)
        Else
            outputLines.Add(line)
        End If
    Next

对于输出我正在使用带有以下代码的savefiledialog:

    SaveFileDialog1.DefaultExt = "txt"
    SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
    SaveFileDialog1.RestoreDirectory = True
    If (SaveFileDialog1.ShowDialog() = DialogResult.OK) Then
        System.IO.File.WriteAllLines(SaveFileDialog1.FileName, outputLines)

虽然文件正确加载,但编辑似乎只发生在一个文件中(最后一个选中),并且程序再次只保存一个文件。

你能指点我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您需要通过打开文件对话框返回的文件名以及ReadLines调用返回的行来嵌套循环。您也不需要从outputLines列表中删除行,因为它们永远不会被添加。类似的东西:

If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    Dim outputLines As New List(Of String)()
    For Each fileName In OpenFileDialog1.FileNames
        For Each line As String In System.IO.File.ReadLines(fileName)
            Uline1 = line.StartsWith("text1")
            Uline2 = line.StartsWith("text2")
            Uline3 = line.StartsWith("text3")
            Uline4 = line.StartsWith("text4")
            Uline5 = line.StartsWith("text5")
            Uline6 = line.StartsWith("text7")
            Uline7 = line.StartsWith("sometext")
            Trash = line.Contains("^")
            If Not (Uline1 Or Uline2 Or Uline3 Or Uline4 Or Uline5 Or Uline6 Or Uline7 Or Trash) Then
                outputLines.Add(line)
            End If
        Next
    Next
End If

如果文件非常大,您将开始遇到内存问题,并且需要在读取数据时将数据写出来,而不是将其全部保存在内存中。

<强>更新

根据评论,如果你想检查以下行以确定是否应该写入当前行,你可以使用这样的东西。请注意使用ReadAllLinesFor循环。

Dim outputLines As New List(Of String)()
For Each fileName In OpenFileDialog1.FileNames
    Dim lines() As String = System.IO.File.ReadAllLines(fileName)
    For i As Integer = 0 To lines.Count - 1
        Dim line As String = lines(i)
        If line.StartsWith("19") AndAlso i < lines.Count - 2 AndAlso lines(i + 1).StartsWith("15") Then
            outputLines.Add(line)
            outputLines.Add(lines(i + 1))
            i += 1
        End If
    Next
Next