PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 1561 dateien vergleichen und doppelte ZEILEN löschen



Schlumpf2009
21.04.2010, 20:27
aloa freunde des gepflegten codens :lol

ich brauche mal wieder einen denkanstoß

Ramenbedingungen

arbeitszeit des prozesses uninteresannt ( wenn es 3 wochen dauert das abzuarbeiten ist egal ! )

Sprache : vb.net 2008 da restcode schon vorhanden zuer weiterverarbeitung

Quelle : textdateien auf ext platte H: ( alle ca 17MB - 53,0 MB )
anzahl : @ moment 1561st mit 76,283,897 MB ( kein witz :confused: )

------------------

so frage 1 : mit welchem suchmuster prüfe ich effektiver ZEILEN ( es wird festgelegt

1 string datei1.txt (davon) 1.zeile (vergleichen mit) 1string datei2.txt (davon) 1.zeile

oder

1 string datei1.txt (davon) rnd zeile (vergleichen mit) 1string datei2.txt (davon) rnd zeile von datei1.txt

oder

?????????????? lasst euch aus

------------------

frage 2 :

das gleiche spiel nun auch bei dateien machen oder ne andere vergleichart

bitte beachten : es "KÖNNEN" andere zeilen vorhanden sein

------------------

frage 3 :

MySQL Version 3.22 hatte eine Begrenzung auf 4 Gbyte bei der Tabellengröße. Mit der Speicher-Engine MyISAM in MySQL Version 3.23 wurde die maximale Tabellengröße auf 65.536 Terabyte (2567 – 1 Byte) erhöht. Das bedeutet, dass die maximale effektive Tabellengröße von MySQL-Datenbanken normalerweise durch Beschränkungen des Betriebssystems hinsichtlich Dateigrößen festgelegt ist, nicht durch MySQL-interne Grenzen.

hmmmm :twisted:D;) noch ne idee

----------------

vielleicht kommt noch was nach

danke schonmal vorab

par0noid
21.04.2010, 20:32
76,283,897 GB ? sicher?

Schlumpf2009
21.04.2010, 20:36
ja leider


Imageshack - unbenanntowt.jpg (http://img691.imageshack.us/i/unbenanntowt.jpg/)
http://img691.imageshack.us/i/unbenanntowt.jpg/

Toastbrot
21.04.2010, 20:37
Frage 1: Natürlich ersteres. Mit einem Zufallswert suchst du "Auf gut Glück". Da kannst du es auch direkt sein lassen.

Frage 2: Wenn ich dich richtig verstehe, dann musst du eine 4-fach verschachtelte For-Schleife nutzen. Du musst jede Datei mit jeder Datei (außer sich selbst) vergleichen und dann jede Zeile in dieser mit jeder anderen Zeile vergleichen. Würde etwa so aussehen:



For i = 0 To AnzahlDateien
For j = 0 To AnzahlDateien
If Not i = j Then
For k = 0 To AnzahlZeilen(Datei(i))
For l = 0 To AnzahlZeilen(Datei(j))
'Vergleichen
Next l
Next k
End If
Next j
Next i


Denk dran, dass die Dauer des Algos quadratisch mit der Anzahl der Dateien steigt. Also bei so vielen und vor allem großen Textdateien wirst du ewig brauchen.

XenoN
21.04.2010, 20:40
ja das sind knapp 80 gb... du hast es aber so aufgeschrieben das es 80 terrabyte sind :D:D:D deswegen hatte er nachgefragt ;)

mfg

Schlumpf2009
21.04.2010, 20:48
ja das sind knapp 80 gb... du hast es aber so aufgeschrieben das es 80 terrabyte sind :D:D:D deswegen hatte er nachgefragt ;)

mfg

ups sry editiert



jop nur das kommt ja nachher noch obendrauf :o

also hier mal n paar sachen die ich grad am testen bin





Private Function ReadLineFromFile(ByVal Filename As String, ByVal Line As Integer) As String
'dieses kleine liest eine definierte zeile aus einer datei ein und gibt sie an die funktion zurück
Try
Dim Textfile As TextReader = New StreamReader(Filename)
Dim cnt As Integer = 0
Do Until cnt = Line
Textfile.ReadLine()
cnt += 1
Loop
ReadLineFromFile = Textfile.ReadLine()
Textfile.Close()

Catch ex As Exception
ende = True
End Try
End Function




Function zeilenzahl(ByVal pfad As String) As String
'Hinweis: Zaehlung beginnt bei 0. Erste Zeile = 0, zweite Zeile = 1 usw.

Dim Path As String = pfad
' String Varianle für die spätere aufnahme deiner Zeile
Dim MeineZeile As String = Nothing
' Zufallsgenerator
Dim Zufall As New Random
' Deine TextDatei in ein Arry einlesen
Dim lines() As String = IO.File.ReadAllLines(Path)
' Die Menge der Zeilen aus der TextDatei ermitteln
Dim Menge As Integer = lines.Count
'MsgBox(Menge)
End Function



Function stringvergleich(ByVal string1 As String, ByVal string2 As String) As Boolean
Dim vergleich As String = ""
'Die Strings sind gleich (Rückgabewert: 0)
'(false = groß/klein sind unterschiedlich )
'(true = groß/klein sind egal )
vergleich = String.Compare(string1, string2, False)
If vergleich = 0 Then
Return True
Else
Return False
End If
End Function






also isses am besten datei 1 mit allen vergleichen dann datei 2 mit allen außer 1&2