Porównanie dwóch plików tekstowych, zwrot różnicy.

0

Witam, poszukuję najprostszej metody by porównać dwa pliki - zwrócić tylko te których nie ma w drugim pliku a są w pierwszym.

Mam około 6000 lini w każdym z plików.

przykład:

plik 1.
...
praa_tunnels_entrance_7
rovinka_nelepi
land_pavement_wide_corner_f
rovnika_nasep
..

plik 2.
...
rovinka_nelepi
land_pavement_wide_corner_f
rovnika_nasep
...

a otrzymać chcę:

...
praa_tunnels_entrance_7
...

Czego użyć czy np plikiem wsadowym z dosa zrobię coś takiego ?
Zależy mi na najprostszym jednorazowym wykonaniu.

0

http://kdiff3.sourceforge.net/
Można używać jako samodzielnej aplikacji lub "wciągnąć" do własnego rozwiązania.

0

wybierz jakikolwiek jezyk. Nie ma znaczenia na dobra sprawe. Ja Ci napisze dla "C++" (bo tak otagowales). Oczywiscie nie gotowy kod

  1. Wczytujesz kazde linie z pliku pierwszego do vectora
    http://stackoverflow.com/questions/15138785/c-reading-file-into-vector
  2. Wczytujesz po kolei linie z drugiego pliku i sprawdzasz czy nie ma tej wartosci w vectorze
    http://stackoverflow.com/questions/571394/how-to-find-an-item-in-a-stdvector
  3. Jezeli go nie ma to masz swoja roznice
0

@woolfik
jeżeli jakakolwiek istnieje to prosiłbym o podanie nazwy jeżeli taką posiadasz.

@fasadin
Ok, dzięki to wystarczy resztę se sam ogarnę.

1

blaster jezeli nie chcesz tego pisac tylko chcesz zobaczyc roznice to mozesz uzyc jakiejkolwiek porownywaki np WinMerge. Wrzucasz tam dwa pliki i Ci podkresli roznice

0

@Blaster444 podałem Ci linka ponadto TotalCommander też ma takie narzędzie gotowe

0

W total comanderze jest taka opcja ale problem polega na tym iż porównuje dokładnie te same linie. Natomiast ja mam słowa poukładane randomowo. I jezeli np słowo Katarzyna jest w 1 linii w pliku 1 oraz w 10 linii w pliku 2 to wyświetla mi to jako różnicę.

0

Do programów wymienionych - sa jeszcze różne wersje programu konsolowego diff...

1

W PowerShell:
Compare-Object -ReferenceObject (Get-Content .\file1.txt) -DifferenceObject (Get-Content .\file2.txt)

1

@Maciej Cąderek

Dzięki to działa idealnie! :)

1

No to moze stary dobry VBScript ;)

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
const adClipString = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Tu uzupełnić dane
strPathtoTextFile = "d:\roboczy"
strFile1 = "file1.txt"
strFile2 = "file2.txt"
strResult = "results.txt"

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & strPathtoTextFile & ";" & _
        "Extended Properties=""text;HDR=NO;FMT=Delimited"""

sql =  "SELECT l.f1 FROM " & strFile1 & " AS L LEFT JOIN " & strFile2 & " as R on r.f1=l.f1 where r.f1 is null" 
objRecordset.Open sql, objConnection, adOpenStatic, adLockOptimistic, adCmdText

Set txtResults = objFSO.CreateTextFile(strPathtoTextFile & "\" & strResult, True)
txtResults.Write objRecordset.GetString(adClipString)
0

W czytać do pamięci, posortowac i szukać algorytmem binarnego wyszukiwania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1