Seite 1 von 1

Identische Werte in Array / Textdatei finden

Verfasst: 17.12.2012 12:45
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 :)

Re: Identische Werte in Array / Textdatei finden

Verfasst: 17.12.2012 13:35
von edel
Nimm eine Map, da gibt es den Schluessel nur einmal.

Re: Identische Werte in Array / Textdatei finden

Verfasst: 17.12.2012 15:08
von _v4
Leider habe ich Daten, bei denen diese Werte mehrfach vorhanden sind und muss mehrfache Einträge finden (nicht vermeiden).

Re: Identische Werte in Array / Textdatei finden

Verfasst: 17.12.2012 15:48
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")

Re: Identische Werte in Array / Textdatei finden

Verfasst: 18.12.2012 11:56
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 :)

Re: Identische Werte in Array / Textdatei finden

Verfasst: 18.12.2012 12:53
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.

Re: Identische Werte in Array / Textdatei finden

Verfasst: 19.12.2012 09:45
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 :)

Re: Identische Werte in Array / Textdatei finden

Verfasst: 19.12.2012 18:26
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