FindMapElement
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Bin doch noch dazu gekommen zu schauen ob es klappt.
Nun habe ich mal in Datei1 folgende Daten
30
300
3999
In Datei2:
30
3999
3999
Nur in Datei1: 300
Das Ergebnis stimmt. Wobei eigentlich auch ein weiterer Unterschied besteht, der beim Code von Nic gefunden wird.
Nur in Datei1: 300
Nur in Datei2: 3999
Nun kommtes darauf an was ich eigentlich will. Ich glaube, da habe ich mich bisher nicht eindeutig ausgedrückt. Wenn ich nun darüber nachdenke, dann sollte auch die 3999 als Differenz angezeigt werden.
Grüße
Nun habe ich mal in Datei1 folgende Daten
30
300
3999
In Datei2:
30
3999
3999
Nur in Datei1: 300
Das Ergebnis stimmt. Wobei eigentlich auch ein weiterer Unterschied besteht, der beim Code von Nic gefunden wird.
Nur in Datei1: 300
Nur in Datei2: 3999
Nun kommtes darauf an was ich eigentlich will. Ich glaube, da habe ich mich bisher nicht eindeutig ausgedrückt. Wenn ich nun darüber nachdenke, dann sollte auch die 3999 als Differenz angezeigt werden.
Grüße
- 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
Nichts einfacher als das.
Code: Alles auswählen
EnableExplicit
Structure CompareMapStruc
ExistsInFile1.i
ExistsInFile2.i
EndStructure
#SIMULATE = #True
#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$
CompilerIf #SIMULATE
Compare("30")\ExistsInFile1 + 1
Compare("300")\ExistsInFile1 + 1
Compare("3999")\ExistsInFile1 + 1
Compare("30")\ExistsInFile2 + 1
Compare("3999")\ExistsInFile2 + 1
Compare("3999")\ExistsInFile2 + 1
Compare("3999")\ExistsInFile2 + 1
CompilerElse
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
CompilerEndIf
ForEach Compare()
If Compare()\ExistsInFile1 > Compare()\ExistsInFile2
Debug "Nur in Datei 1: >" + MapKey(Compare()) + "<"
Debug " Anzahl: " + Str(Compare()\ExistsInFile1 - Compare()\ExistsInFile2)
Debug "---------------------------------------------"
ElseIf Compare()\ExistsInFile1 < Compare()\ExistsInFile2
Debug "Nur in Datei 2: >" + MapKey(Compare()) + "<"
Debug " Anzahl: " + Str(Compare()\ExistsInFile2 - Compare()\ExistsInFile1)
Debug "---------------------------------------------"
EndIf
Next
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Hallo Nic,
vielen Dank.
Ich glaube, ich nehme deinen ersten Code, da dieser auch doppelte Einträge anzeigt. Der Code von matbal scheint zwar etwas schneller zu sein, wobei dieser dopplte Einträge nicht anzeigt.
Vielen Dank für eure Mühe und Gedult mit mir. Ich denke ich habe nun alles was ich brauche.
Euch allen ein schönes Wochenende
vielen Dank.
Ich glaube, ich nehme deinen ersten Code, da dieser auch doppelte Einträge anzeigt. Der Code von matbal scheint zwar etwas schneller zu sein, wobei dieser dopplte Einträge nicht anzeigt.
Vielen Dank für eure Mühe und Gedult mit mir. Ich denke ich habe nun alles was ich brauche.
Euch allen ein schönes Wochenende
- 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
Irrtum. Du hast nur nicht richtig geschaut. Er zeigt doch doppelte Einträge an. Da steht doch dann "Anzahl: 2", wenn eine Zeile doppelt vorkommt.
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Meinst du den Code von matbal den du modifiziert hast? In diesen hast du
eingebaut. Was bewirkt denn das.
__________________________________________________
Code-Tags hinzugefügt
08.07.2014
RSBasic
Code: Alles auswählen
CompilerIf #SIMULATE
; Compare("30")\ExistsInFile1 + 1
; Compare("300")\ExistsInFile1 + 1
; Compare("3999")\ExistsInFile1 + 1
;
; Compare("30")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
CompilerElse
__________________________________________________
Code-Tags hinzugefügt
08.07.2014
RSBasic
- 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
Ist das wirklich nicht zu verstehen?
Das simuliert halt zwei Dateien, in denen pro Zeile diese Zahlen drin stehen, weil ich keine Lust hatte extra "Datei1.txt" und "Datei2.txt" zum Testen zu erstellen.
Verstehst du überhaupt irgendwas an dem Code?
Das simuliert halt zwei Dateien, in denen pro Zeile diese Zahlen drin stehen, weil ich keine Lust hatte extra "Datei1.txt" und "Datei2.txt" zum Testen zu erstellen.
Verstehst du überhaupt irgendwas an dem Code?
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Hallo Nic,
diesen Teil hatte ich mal auskommentiert und der Code hat dann geklappt. Also mehr oder weniger try and error. Ansonsten verstehe ich so 80% vom Code. Mehr leider nicht. Wie auch immer. Der Vergleich ist sehr schnell.
Nun habe ich aber alles was ich brauche. Das ist echt toll, wie schnell das nun geht im Vergleich zu meinem Code, der 120 ms brauchte. Herzlichen Dank
diesen Teil hatte ich mal auskommentiert und der Code hat dann geklappt. Also mehr oder weniger try and error. Ansonsten verstehe ich so 80% vom Code. Mehr leider nicht. Wie auch immer. Der Vergleich ist sehr schnell.
Nun habe ich aber alles was ich brauche. Das ist echt toll, wie schnell das nun geht im Vergleich zu meinem Code, der 120 ms brauchte. Herzlichen Dank
Re: FindMapElement
Das sind nur Beispieldaten, um die Modifikation direkt zu testen. Die entscheidende Modifikation von NicTheQuick befindet sich woanders.Martin66119 hat geschrieben:Meinst du den Code von matbal den du modifiziert hast? In diesen hast du
CompilerIf #SIMULATE
; Compare("30")\ExistsInFile1 + 1
; Compare("300")\ExistsInFile1 + 1
; Compare("3999")\ExistsInFile1 + 1
;
; Compare("30")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
; Compare("3999")\ExistsInFile2 + 1
CompilerElse
eingebaut. Was bewirkt denn das.
Das Auskommentieren ist nicht erforderlich, einfach oben bei "#SIMULATE" "#False" angeben.Martin66119 hat geschrieben:[...] diesen Teil hatte ich mal auskommentiert [...]

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
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Guten Morgen,
In der Schleife wird jede einzelne Zeile eingelesen und key$ zugewiesen. Dann in die Structure
die eine Map ist in Compare(key$)\ExistsInFile1 reingeschrieben und die Adresse um eins hochgezählt. Verstehe ich das richtig?
Was mich etwas wundert ist, dass der Code von matbal die Auswertung in ca. 1-2 ms erledigt und der Code von Nic 18ms braucht. Klar bei dem Code von Nic ist noch 2x SortList drin.
Grüße
Code: Alles auswählen
If ReadFile(0, "Datei1.csv")
While Not Eof(0)
key$ = ReadString(0)
Compare(key$)\ExistsInFile1 + 1
Wend
CloseFile(0)
EndIf
die eine Map ist in Compare(key$)\ExistsInFile1 reingeschrieben und die Adresse um eins hochgezählt. Verstehe ich das richtig?
Was mich etwas wundert ist, dass der Code von matbal die Auswertung in ca. 1-2 ms erledigt und der Code von Nic 18ms braucht. Klar bei dem Code von Nic ist noch 2x SortList drin.
Grüße
- 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
Moin moin.Martin66119 hat geschrieben:Guten Morgen,
Stimmt.In der Schleife wird jede einzelne Zeile eingelesen und key$ zugewiesen. Dann in die StructureCode: Alles auswählen
If ReadFile(0, "Datei1.csv") While Not Eof(0) key$ = ReadString(0) Compare(key$)\ExistsInFile1 + 1 Wend CloseFile(0) EndIf
die eine Map ist in Compare(key$)\ExistsInFile1 reingeschrieben und die Adresse um eins hochgezählt. Verstehe ich das richtig?
Und was wundert dich dann genau?Was mich etwas wundert ist, dass der Code von matbal die Auswertung in ca. 1-2 ms erledigt und der Code von Nic 18ms braucht. Klar bei dem Code von Nic ist noch 2x SortList drin.