Domino 9 und frühere Versionen > ND8: Entwicklung

Position in Liste bestimmen

<< < (2/3) > >>

koehlerbv:
@Mewmber gibt nur den ersten "Treffer" zurück, Dirk. Roberts Lösung erzeugt aber ggf. eine Liste aller Treffer.

Was mir nicht gefällt: @Text(_pos). Wenn schon, dann sollte eine Zahl oder Zahlenliste zurückgegeben werden.

Bernhard

dirk_2909:
Ok. Wenn man es braucht.

bikerboy:
So bin auf Bernhards Kritik eingegangen

Hatte aber ein Problem mit der Zahlenliste, wenn diese leer ist, habe es nun folgendermaßen gelöst;


--- Code: ---_positions := 0;

@For(_n := 1 ; _n < @Elements(_list) ; _n := _n + 1 ; _pos := @If(@Subset(@Subset(_list; _n); - 1) = _key ; _n ; 0);
@If(_pos != 0 ; _positions := _positions : _pos; ""));

_positions := @Subset(_positions; - (@Elements(_positions) - 1));

--- Ende Code ---

Läuft natürlich auf einen Fehler, wenn er gar Nichts findet

Thomas Schulte:
Deine Lösung hat, außer dem Fehler den du bereits nennst, wenn das gesuchte Element nicht enthalten ist, noch einen anderen Haken.

Stell doch an die letzte Stelle deiner Werteliste das gesuchte Element noch einmal und schau dir dann deine Positionen die du zurückbekommst an.

Wenn du nur das letzte Element hast bekommst du den Fehler beim Subset wieder. Wenn es in der Liste an anderer Stelle noch vorkommt entfällt bei deiner Lösung das letzte Element.

Eine funktionierende Lösung deines Problemes mit einem etwas anderen Ansatz schaut zum Beispiel so aus:

--- Code: ---REM {Baue eine Zählerliste mit der gleichen Anzahl von Elementen};
@For(_i:=1;_i<= @Elements(fldListe);_i :=_i+1;_Counter := _Counter : @Text(_i));
REM {Verheirate beide Listen, einfache ConCat Operation (möglich weil die Anzahl der Elemente beider Listen gleich sein muss),};
REM {aber weil das erste Element der _Counter Liste leer ist mach da einen Trim außenrum, damit beide Listen gleich lang sind};
_ListeCount := @Trim(_Counter) + ":" + fldListe;
REM {Entferne aus der Liste alles was nicht dem gesuchten Wert entspricht und gebe nur den _Counter Teil zurück. Entferne alle leeren Elemente};
@Trim(@Transform(_ListeCount;"x";@If(@Word(x;":";2)=fldWert;@Word(x;":";1);"")))

--- Ende Code ---

Diesen Ansatz kann man übrigens mit wenigen Handgriffen so umbauen, das er dir die Positionen aller Elemente in der Liste zurückgibt, in denen dein gesuchter Wert auch nur teilweise enthalten ist.

bikerboy:

--- Zitat von: Thomas Schulte am 19.11.08 - 11:46:26 ---

Stell doch an die letzte Stelle deiner Werteliste das gesuchte Element noch einmal und schau dir dann deine Positionen die du zurückbekommst an.


--- Ende Zitat ---


Hmm passt bei mir, hier der Beispiel Code :


--- Code: ---_pos := 0 ;
_positions := 0;
_list :="Eins" : "Zwei" : "Drei" : "Vier":"Eins" : "Zwei" : "Drei" : "Vier":
_key := "Vier";


@For(_n := 1 ; _n < @Elements(_list) ; _n := _n + 1 ; _pos := @If(@Subset(@Subset(_list; _n); - 1) = _key ; _n ; 0);
@If(_pos != 0 ; _positions := _positions : _pos; ""));

_positions := @Subset(_positions; - (@Elements(_positions) - 1));

@Prompt([Ok]; "Position" ; @Implode(@Text(_positions);"#"))
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln