Autor Thema: Identische Arrayeinträge aus einem Array herausfiltern  (Gelesen 2030 mal)

Offline Christian Weiß

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Hallo,

ich greife mit Hilfe eines Agenten auf Dokumente zu und schreibe dann pro Dokument von verschiedenen Multi-Value Feldern die Werte mit Lotusscript in verschiedene Arrays.
Die in den Arrays stehenden Werte sehen dann z. B. so aus:
Person A~Prüfer~123
Person A~Prüfer~456
Person B~Freigeber~222
Person B~Freigeber~333
Person C~Letzter Freigeber~888

Jetzt ist es ja so, dass es für Person A zwei Einträge als Prüfer gibt. Ich möchte jetzt ganz gerne das der Eintrag Person A~Prüfer~456 in ein anderes Array geschrieben wird.
Ähnliches gilt auch für den Eintrag Person B~Freigeber~333. Es müssten also nur die ersten beiden Teile der Zeichenkette des Arrayeintrages überprüft werden.
Der letzte Teil der Zeichenkette wird jedoch auch benötigt. Dies ist die Unid-ID von Dokumenten.Diese Dokumente sollen dann gelöscht werden, wenn bestimmte Voraussetzungen erfüllt sind. Ich hoffe ihr versteht was ich gerne möchte und könnt mir Empfehlungen geben wie ich dies am besten und nicht zu Performanzlastig umsetzen könnte?
Gruß

Christian

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Identische Arrayeinträge aus einem Array herausfiltern
« Antwort #1 am: 17.06.11 - 18:11:10 »
Und wo ist Deine konkrete Frage?

Ich würde -entweder schon beim erstellen der Arrays oder beim späteren durchlaufen- eine Liste erstellen (sehr performant, unheimlich leicht zu programmieren):

Zum Beispiel so:
Code
Dim listKeys List as String
Dim listKeysDel List as String

Forall strVal in DeinArray
    strKey = strleftback( strVal , "~" )
    if iselement( listKeys( strKey ) ) then
        '- Key schon vorhanden... am besten in ner Liste merken
        listKeysDel( strVal ) = strrightback( strVal , "~" ) '- auf diese Weise hast Du schon die UNID direkt als Wert
    else
        listKeys( strKey ) = strVal
    end if
End Forall

Forall strUnid in listKeysDel
        '- mache was Du mit den Doks machen musst...
End Forall

HTH
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Christian Weiß

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Identische Arrayeinträge aus einem Array herausfiltern
« Antwort #2 am: 18.06.11 - 14:23:13 »
Hallo Torsten,

vielen Dank für Deine Antwort. Ich hatte auch schon die Idee mit Listen zu arbeiten, muss aber gestehen das ich damit noch nicht so viel gemacht habe.

Ich habe leider noch ein kleines Problem:
Mein Array hat leider nicht mehr 3 Einträge sondern 4.

Person A~Prüfer~True~123
Person A~Prüfer~False~456
...

Ich würde es jetzt gerne erreichen, dass der Eintrag 'Person A~Prüfer~False~456' herausgefiltert wird, also die UNID direkt als Wert in einer Liste steht.
Gruß

Christian

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Identische Arrayeinträge aus einem Array herausfiltern
« Antwort #3 am: 18.06.11 - 15:17:59 »
Dann würde ich mir die einzelnen Einträge auseinanderdröseln, etwa so (ohne Anspruch auf korrekte Syntax und ohne Errorhandling)

Dim tmpwerte As Variant
Dim personen List As String
Forall a in array
   tmpwerte = Split (a, "~")
   REM
   Dann ist beim ersten Eintrag
   tmpwerte (0) = "Person A"
   tmpwerte (1) = "Prüfer"
   tmpwerte (2) = "True"
   tmpwerte (3) = "123"
   END REM
   personen (tmpwerte (0) & "~" & tmpwerte (1)) = tmpwerte (3)
End Forall

Bei einem Inhalt in array von

Person A~Prüfer~True~123
Person A~Prüfer~False~456
Person B~Freigeber~True~222
Person B~Freigeber~False~333
Person C~Letzter Freigeber~True~888

sieht die Liste personen nach Duchlauf des obigen Scriptes so aus:

personen ("Person A~Prüfer") = "456"
personen ("Person B~Freigeber") = "333"
personen ("Person C~Letzer Freigeber") = "888"

Wenn Du es etwas anders haben willst (da ich zugeben muss, dass ich nicht wirklich verstanden habe, wie Du genau was herausfiltern willst), kannst Du Dir die Schlüssel und die Werte entsprechend anders zusammenbauen. Entscheidend ist, dass Du in der Liste die einzelnen Elemente mit ihrem Schlüssel ansprichst, im Gegensatz zum Array, wo Du die Nummer des Elements benötigst. Sobald ein Schlüssel erneut auftritt, wird das Element überschrieben. Deshalb gewinnt so die letzte UNID des Schlüssels (z.B. Scchlüssel = "Person A~Prüfer", UNID erst "123", dann überschrieben durch "456").

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Identische Arrayeinträge aus einem Array herausfiltern
« Antwort #4 am: 18.06.11 - 21:33:58 »
In meinem Code würde die neue Anforderung durch Änderung von zwei Zeilen implementiert:

aus
  strKey = strleftback( strVal , "~" )
wird
  strKey = strtoken( strVal , "~" ,1 ) & "~" & strtoken( strVal , "~" ,2 )

und aus
listKeysDel( strVal ) = strrightback( strVal , "~" )
wird
listKeysDel( strVal ) = strtoken( strVal , "~" ,3 )

aber genau aus diesem Grund liefere ich hier im Forum eher ungern fertigen Code.
Weil der Fragensteller dann nämlich aufhört, selbst nachzudenken....

Und auf diese Lösung hätte man ja durchaus mit ein wenig nachdenken selbst kommen können...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Christian Weiß

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Identische Arrayeinträge aus einem Array herausfiltern
« Antwort #5 am: 19.06.11 - 12:59:19 »
Vielen Dank für Eure Antworten.
Das hat mir sehr geholfen.

strToken hört sich interessant an. Die Funktion kannte ich noch nicht.
Gruß

Christian

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz