Seite 5 von 9
Re: FindMapElement
Verfasst: 23.06.2014 19:28
von NicTheQuick
Sicro hat geschrieben:Der Nachteil bei diesem Code ist, dass er verschobene Zeilen nicht als Unterschied erkennt.
Datei 1 hat geschrieben:Hans
Peter
Thomas
Datei 2 hat geschrieben:
Peter
Hans
Thomas
Die Beispieldateien oben wären also laut dem Code identisch, obwohl die ersten zwei Zeilen unterschiedlich sind.
Das war bisher auch immer so gedacht. Von daher kommt es jetzt drauf an, ob der Code tatsächlich schneller ist.
Re: FindMapElement
Verfasst: 23.06.2014 21:42
von Sicro
Naja, die Map-Technik kann erst ihre Stärken zeigen, wenn viele Einträge doppelt vorhanden sind.
Wenn keine Duplikate vorhanden sind, gehe ich aktuell davon aus, dass Maps in meinem Code langsamer sind, da beim Hinzufügen der Elemente jedes Mal ein Hash berechnet werden muss, was bei den Listen (AddElement()) ja nicht erforderlich ist, aber in dem Fall kann die Map im Code ja einfach zu einer Liste umgeschrieben werden.
Ich bin gespannt auf das Ergebnis.

Re: FindMapElement
Verfasst: 24.06.2014 09:20
von Martin66119
Guten Morgen Sicro,
die Auswertung dauert ca. 2ms. Also sehr schnell. Nur am Ergebnis stimmt was nicht.
Ergebnis Datei1: ok
Ergebnis Datei 2: falsch.
- Anzeige Anzahl 2 - Ist = 1
- Es wird kein String angezeigt.
Der String der angezeigt werden müsste befindet sich in der Datei 2 in der letzten Zeile.
Re: FindMapElement
Verfasst: 24.06.2014 18:47
von Sicro
Ok, aber mit deinen Angaben kann ich leider nichts anfangen.
Kannst du deine zwei Testdateien vielleicht irgendwo hochladen und uns zum Download anbieten?
Re: FindMapElement
Verfasst: 24.06.2014 21:13
von Martin66119
Guten Abend,
geht leider nicht, da es keine Testdaten sind.
Re: FindMapElement
Verfasst: 24.06.2014 22:08
von Sicro
Martin66119 hat geschrieben:Der String der angezeigt werden müsste befindet sich in der Datei 2 in der letzten Zeile.
Diese Zeile wäre für eine Lösungsfindung wichtig. Kannst du diese vielleicht anonymisiert nennen?
Die Maps kommen eigentlich auch mit Keys klar, die Sonderzeichen oder Unicode-Zeichen enthalten, aber irgendwas muss in der Zeile stören.
Re: FindMapElement
Verfasst: 24.06.2014 23:24
von NicTheQuick
Ich bin jetzt ja schon etwas neugierig. Was sind das denn für Dateien, die offensichtlich zeilenbasiert und so geheim sind?

Re: FindMapElement
Verfasst: 25.06.2014 07:07
von Martin66119
Guten Morgen,
ich habe mal Testdaten erstellt, bei denen das Problem auch auftaucht.
Zahlen habe ich im Editor reingeschrieben (jede Zahl in eine neue Zeile; ohne das Komma)
Datei1.txt: 30,300
Datei2.txt: 1,2,3,3999,3999
Ergebnis:
Nur in Datei2:
Anzahl: 2
Nur in Datei 2: 3999
Anzahl: 1
Nur in Datei 2: 2
Anzahl: 1
Nur in Datei 1: 300
Anzahl: 1
Re: FindMapElement
Verfasst: 25.06.2014 13:43
von matbal
Der Fehler tritt bei mir auch auf. Offensichtlich hängt das irgendwie mit mit dem Anlegen der Map-Elemente zusammen.
Wenn ich die Zeile
auftrenne in
funktioniert es richtig.
Code: Alles auswählen
EnableExplicit
Structure CompareMapStruc
ExistsInFile1.i
ExistsInFile2.i
EndStructure
#Slots = 512 ; Dieser Wert erhöhen, um die Zugriffsgeschwindigkeit bei großen Datenmengen zu erhöhen (siehe PB-Hilfe)
NewMap Compare.CompareMapStruc(#Slots)
Define key$
If ReadFile(0, "Datei1.txt")
While Not Eof(0)
key$ = ReadString(0)
Compare(key$)\ExistsInFile1 + 1
Wend
CloseFile(0)
EndIf
If ReadFile(0, "Datei2.txt")
While Not Eof(0)
key$ = ReadString(0)
Compare(key$)\ExistsInFile2 + 1
Wend
CloseFile(0)
EndIf
ForEach Compare()
If Compare()\ExistsInFile1 And Not Compare()\ExistsInFile2
Debug "Nur in Datei 1: >" + MapKey(Compare()) + "<"
Debug " Anzahl: " + Str(Compare()\ExistsInFile1)
Debug "---------------------------------------------"
ElseIf Compare()\ExistsInFile2 And Not Compare()\ExistsInFile1
Debug "Nur in Datei 2: >" + MapKey(Compare()) + "<"
Debug " Anzahl: " + Str(Compare()\ExistsInFile2)
Debug "---------------------------------------------"
EndIf
Next
Re: FindMapElement
Verfasst: 25.06.2014 15:50
von Martin66119
Komme erst am WE dazu nachzuschauen ob es nun bei mir auch geht.
Jedenfalls schon einmal vielen Dank
Martin