Identische Werte in Array / Textdatei finden

Anfängerfragen zum Programmieren mit PureBasic.
_v4
Beiträge: 26
Registriert: 16.11.2012 13:36

Identische Werte in Array / Textdatei finden

Beitrag von _v4 »

Möchte gerne identische Werte in einer Textdatei finden. Die Datei ist folgendermaßen aufgebaut:

Code: Alles auswählen

txt1
wert1
wert1
txt2
wert2
wert2
txt3
wert3
wert3
txt4
wert4 (= wert1)
wert4 (= wert1)
Kann das natürlich auch einlesen das ich nur die "werte" lese und dann (wert1, wert2, wert3 und wert4) untereinander vergleichen. Nur denke ich mir, dass das nicht sonderlich effizient ist.

Gibts da bessere Möglichkeiten? Kann ein Array "dynamisch erweitert" werden, d.h. wärend der Laufzeit vergrößert, ohne das ich um meine Daten bangen muss?

Vielen Dank schonmal :)
Zuletzt geändert von _v4 am 17.12.2012 15:09, insgesamt 2-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Identische Werte in Array / Textdatei finden

Beitrag von edel »

Nimm eine Map, da gibt es den Schluessel nur einmal.
_v4
Beiträge: 26
Registriert: 16.11.2012 13:36

Re: Identische Werte in Array / Textdatei finden

Beitrag von _v4 »

Leider habe ich Daten, bei denen diese Werte mehrfach vorhanden sind und muss mehrfache Einträge finden (nicht vermeiden).
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Identische Werte in Array / Textdatei finden

Beitrag von RSBasic »

Dann nimm eine LinkedList und sortiere es anschließend. Danach kannst du von oben nach unten durchgehen und gleichzeitig ermitteln, ob Duplikate vorhanden sind.
Du kannst aber bei Map auch Duplikate ermitteln. Du musst nur vorher auf deine Map zugreifen und auslesen, ob der Eintrag bereits vorhanden ist.
Also etwa so:

Code: Alles auswählen

EnableExplicit

Global NewMap TestMap.i()

Procedure.s AddMapItem(Name$)
  If TestMap(Name$) = 0
    TestMap(Name$) = 1
  Else
    ProcedureReturn Name$ + " ist bereits vorhanden."
  EndIf
  
EndProcedure

Debug AddMapItem("ABC")
Debug AddMapItem("DEF")
Debug AddMapItem("ABC")
Debug AddMapItem("GHI")
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
_v4
Beiträge: 26
Registriert: 16.11.2012 13:36

Re: Identische Werte in Array / Textdatei finden

Beitrag von _v4 »

Vielen Dank für die Antwort. Damit finde ich die doppelten Einträge. Nun ist es so, dass die Einträge die doppelt sind unterschiedliche IDs haben. Diese IDs möchte ich gerne herausfinden.

Kann ich sowas wie eine 2D Map anlegen in der ich nur eine Spalte nach dem Schema von oben auf Duplikate prüfe?

Beispiel zum Hinzufügen:

id1 val1
id2 val2
id3 val3
id4 val2 <-- Kann nicht hinzugefügt werden, da der Wert zur id2 identisch mit dem Wert von id4

Sprich Ergebnis soll sein: id2 und id4 haben identische Werte!

Würde mich freuen, wenn ich wüsste wie ich das realisieren kann?

Schöne Grüße :)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Identische Werte in Array / Textdatei finden

Beitrag von NicTheQuick »

Na dann nutzt du die Map einfach umgekehrt. Du nimmst als Schlüssel den Wert (val1, val2, usw) und speicherst zu dem Schlüssel dann den Identifier (id1, id2, usw.). Wenn dann ein Wert schon mal vor kam, dann kannst du das ja erkennen und weißt auch, welchem Identifier dieser schon einmal zugewiesen war.
_v4
Beiträge: 26
Registriert: 16.11.2012 13:36

Re: Identische Werte in Array / Textdatei finden

Beitrag von _v4 »

Bin leider nicht fit was den Umgang mit Maps angeht. Kann mir jemand einen Link zu einem guten Tutorial geben oder mir in dem Fall helfen?

Danke :)
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Identische Werte in Array / Textdatei finden

Beitrag von H.Brill »

Nimm doch eine Map() mit einer Structure.
sowas halt :

Code: Alles auswählen

Structure Text
    Wert1.l
    Wert2.l
EndStructure

NewMap Texte.Text()
  
  ; Hier verwenden wir das aktuelle Element nach dem Einfügen
  ; Wir füllen die Map
  
Texte("Text1")\Wert1 = 10
Texte("Text1")\Wert2 = 20
Texte("Text2")\Wert1 = 30
Texte("Text2")\Wert2 = 40
Texte("Text3")\Wert1 = 50
Texte("Text3")\Wert2 = 60
Texte("Text4")\Wert1 = 10
Texte("Text4")\Wert2 = 20

;ResetMap(Texte())
; Her lesen wir aus.

ForEach Texte()
    Debug "Text: "   + MapKey(Texte())
    Debug "Wert 1: " + Str(Texte()\Wert1)
    Debug "Wert 2: " + Str(Texte()\Wert2)
Next 
PB 6.10
Antworten