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? :mrgreen:

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

Code: Alles auswählen

Compare(ReadString(0))\ExistsInFile1 + 1
auftrenne in

Code: Alles auswählen

key$ = ReadString(0)
Compare(key$)\ExistsInFile1 + 1
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