Błąd w skrypcie

Mam 2 pliki txt(słowniki) i w nich wyrazy ustawione jeden pod drugim od A-Z
Jeden koło 3 mln, a drugi 200 tys.
W małym pliku znajdują się wyrazy, które też są w dużym.
Chciałbym z tego dużego usunąć wszystkie wyrazy, które znajdują się również w małym pliku.
Napisałem skrypt VBS, który potrzebuje na wykonanie zadania 5-6 godzin.

Dim Dostep
Dim Text1(3000000), Text2(200000), aa, bb, cc, nn, nr, Path

Set Dostep = CreateObject(“Scripting.FileSystemObject”)
Path = “B:\pl-ANSI.akp” 'ok 3 mln wyrazów
Set MyFile = Dostep.OpenTextFile(Path, 1) 'ForReading

Do While MyFile.AtEndOfStream <> True
nr = nr + 1
Text1(nr) = MyFile.ReadLine
Loop
MyFile.Close

Path = “B:\xxx.akp” 'ok 200 tys. wyrazów
Set MyFile = Dostep.OpenTextFile(Path, 1) 'ForReading

Do While MyFile.AtEndOfStream <> True
nn = nn + 1
Text2(nn) = MyFile.ReadLine
Loop
MyFile.Close

Path = “B:\pl-ANSI-AE.akp”
Set MyFile = dostep.OpenTextFile(Path, 2, True) 'ForWriting

For aa = 1 To nr
For bb = 1 + cc To nr
If Text2(bb) > Text1(aa) Then
MyFile.WriteLine Text1(aa)
Exit For
ElseIf Text2(bb) = “” Then
MyFile.WriteLine Text1(aa)
Exit For
ElseIf Text1(aa) = Text2(bb) Then
cc = cc + 1
Exit For
End If
Next
Next
MyFile.Close

Szybciej komputery przeliczają trajektorię rakiety na księżyc.
Co napisałem źle, że to taka porażka.

Błąd gdzieś tkwi w tych dwóch pętlach For.

Petla w petli to najgorszy mozliwy blad, ktory niszczy wydajnosc. Nie rob tego nigdy;)

Najprostszym rozwiazaniem jest uzycie bash (mozesz spokojnie uzyc bash na windows dzieki WSL):
comm -2 -3 file1 file2
o ile masz posortowane pliki. Bedzie szybko.

Tutaj zreszta masz pare opcji:

Najszybsza chyba jest tam aplikacja w ruby:

b=File.read(“file2”).split
a=File.read(“file1”).split
(a-b).each {|x| puts x}

Nie rob niczego co ma O(N^2) complexity.