Home > Software design >  Merge two big files
Merge two big files

Time:03-08

I need to join two text files together, but I don't just want to add one to the other, but rather add the lines of the first file until I find a word, then the same for the second, then back to the first and continue the cycle until I run out of both files .

I have the following code, which works (but takes a long time) with files of around 50k lines, but the files I need to merge are around 2kk lines.

Private Sub Juntar_Click(sender As Object, e As EventArgs) Handles Juntar.Click
        Gravar.Enabled = False
        System.IO.File.Delete("c:\temp\tempfile.txt")

        Do Until (Prog_1_Button.Enabled = True And Prog_2_Button.Enabled = True)
            While Not (Prog_1_Button.Enabled)
                lines = System.IO.File.ReadAllLines(file1).ToList
                arrayLines = lines.ToArray
                Dim i As Integer = lines.IndexOf(Array.Find(arrayLines, Function(x) (x.Contains("teste"))))
                saida = lines.GetRange(0, i   1)
                lines.RemoveRange(0, i   1)

                System.IO.File.WriteAllLines(file1, lines)
                If i >= 0 Then
                    Prog_Bar.Value = Prog_Bar.Value   i
                    Exit While
                Else
                    saida = lines
                    Prog_1_Button.Enabled = True
                End If
            End While
            System.IO.File.AppendAllLines("c:\temp\tempfile.txt", saida)
            saida.Clear()
            While Not (Prog_2_Button.Enabled)
                lines = System.IO.File.ReadAllLines(file2).ToList
                arrayLines = lines.ToArray
                Dim i As Integer = lines.IndexOf(Array.Find(arrayLines, Function(x) (x.Contains("teste"))))
                saida = lines.GetRange(0, i   1)
                lines.RemoveRange(0, i   1)

                System.IO.File.WriteAllLines(file2, lines)
                If i >= 0 Then
                    Prog_Bar.Value = Prog_Bar.Value   i
                    Exit While
                Else
                    saida = lines
                    Prog_2_Button.Enabled = True
                End If
            End While

            System.IO.File.AppendAllLines("c:\temp\tempfile.txt", saida)
            saida.Clear()
        Loop
        Gravar.Enabled = True

    End Sub

Example:

**file_1:**
aaa1
bbb1
**teste**1
ccc1
ddd1
**teste**1


**file_2:**
aaa2
bbb2
**teste**2
ccc2
ddd2
**teste**2

**output:**
aaa1
bbb1
**teste**1
aaa2
bbb2
**teste**2
ccc1
ddd1
**teste**1
ccc2
ddd2
**teste**2

CodePudding user response:

This code should do it (much simpler):

I created a console app so, you might need to add the GUI stuff, or not because that's one of the things that can slow down your app.

Imports System
Imports System.IO

Module Program
    Sub Main(args As String())

        Dim lines1() As String = File.ReadAllLines("d:\\temp\\input1.txt")
        Dim lines2() As String = File.ReadAllLines("d:\\temp\\input2.txt")
        Dim newfile As System.IO.StreamWriter
        newfile = New StreamWriter("d:\\temp\\output.txt", False)

        Dim i2 As Integer = 0
        For i1 = 0 To lines1.Count - 1
            newfile.WriteLine(lines1(i1))
            If (lines1(i1).Contains("teste")) Then
                For j = i2 To lines2.Count - 1
                    newfile.WriteLine(lines2(j))
                    i2 = j   1
                    If (lines2(j).Contains("teste")) Then
                        Exit For
                    End If
                Next
            End If
        Next
        For j = i2 To lines2.Count - 1
            newfile.WriteLine(lines2(j))
        Next
        newfile.Close()
    End Sub
End Module
  • Related