Index eines Arrays ermitteln.
Ninox Profile

Hallo zusammen,

ich kann aus einem Array  mit

item(array, index)

einzelne Werte extrahieren. Ich brauche eine umgekehrte Funktion, quasi 

index(array, item)

bis jetzt habe ich mit einer Schleife realisiert:

---

for II from 0 to cnt(myARRAY) do

if item(myARRAY, II)=myITEM then

let myINDEX:=II

end

end

---

Es ist aber nur für kurze Arrays gut. Gibt es auch einen direkten weg?

 

Grüße

Leo

 

M

Hier eine weitere Variante. Sie beendet die Schleife vorzeitig, wenn der Wert gefunden wurde. Man kann auch durch Setzen von "i" von einer anderen als der ersten Stelle im Array anfangen zu suchen. Wünschenswert wäre aber wie Leo schon sagte, eine eingebaute Funktion zum index finden.

var break_ := false;
var i := 0; let info="index, ab dem gesucht wird, 0-basiert";
let len := cnt(array);
var idx := -1; let info="default wert, falls gesuchter wert nicht gefunden wird.";
while not break_ and i < len do
    if pnr = item(array, i) then
        idx := i;
        break_ := true
    end;
    i := i + 1
end
;

Ninox Profile

Geht vielleicht auch so:

let teil:=index(text(myARRAY),myITEM) + length(myITEM);
let newArray := split(substr(text(myARRAY),0,teil),",");
let myINDEX := cnt(newArray);

Array zu Text machen, Teilstring suchen und als Ende eines neuen Arrays einsetzen. Das gesuchte Teil liegt dan am Ende und wird mit cnt() gefunden.

M

@Günther

Aber nur solange in dem Array keine Werte stehen, die ein Komma beinhalten ;)

Ninox Profile

Richtig, aber so etwas macht man nicht ;-)

Ninox Profile

Danke Günther, sehr hilfreich:

Dein Code-Snippet funktioniert!

 

Ninox Profile

Danke Günther, sehr hilfreich:

Dein Code-Snippet funktioniert!

 

A

Um den "Index" in einer Tabelle zu bekommen, kann man man folgende Funktion berechnen:

let n := number(Nr);

cnt((select Tabelle)[number(Nr) <= n])

Das Ergebnis ist eine fortlaufende Zahl, beginnend mit 1, da cnt nur die wirklichen Einträge zählt. Wird ein Eintrag gelöscht, dann wird automatisch der "Index" neu berechnet. Dies geschieht aber erst, wenn man die Tabelle refreshed. Im Gegensatz zu Nr, wo Zahlen fehlen, wenn man einen Eintrag löscht, bleibt hier die Kontinuität der Zahlen erhalten! Dies kann man natürlich auch mit einem Array machen! Wäre schön, wenn es eine Funktion recalc gäbe, die man an das Ende der Funktion stellen könnte, damit automatisch eine Neuberechnung durchgeführt werden kann!

Antworten