FindMapElement

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: FindMapElement

Beitrag 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.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: FindMapElement

Beitrag 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. :)
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: FindMapElement

Beitrag 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.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: FindMapElement

Beitrag 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?
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: FindMapElement

Beitrag von Martin66119 »

Guten Abend,

geht leider nicht, da es keine Testdaten sind.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: FindMapElement

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: FindMapElement

Beitrag von NicTheQuick »

Ich bin jetzt ja schon etwas neugierig. Was sind das denn für Dateien, die offensichtlich zeilenbasiert und so geheim sind? :mrgreen:
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: FindMapElement

Beitrag 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
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: FindMapElement

Beitrag 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 
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: FindMapElement

Beitrag von Martin66119 »

Komme erst am WE dazu nachzuschauen ob es nun bei mir auch geht.

Jedenfalls schon einmal vielen Dank
Martin
Antworten