我需要將兩個文本檔案連接在一起,但我不只是想將一個添加到另一個,而是添加第一個檔案的行,直到找到一個單詞,然后第二個相同,然后回傳第一個并繼續回圈,直到我用完兩個檔案。
我有以下代碼,它適用于大約 50k 行的檔案(但需要很長時間),但我需要合并的檔案大約是 2kk 行。
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
例子:
**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
uj5u.com熱心網友回復:
這段代碼應該這樣做(更簡單):
我創建了一個控制臺應用程式,因此您可能需要添加 GUI 的東西,或者不需要,因為這是會減慢您的應用程式的事情之一。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442644.html
