Schleifen, Variablen und Listen

Gestern hat mich ein Kunde gebeten, ihm zu zeigen, wie man eine Liste mit Daten (Return getrennte Werte) in einzelne Datensätze aufteilt. Diese Aufgabe kann man mit nur ein paar Zeilen in FileMaker lösen.

Ich habe ihm eine Besipieldatei erstellt, die ihm das Problem löst. Diese Datei möchte ich hier vorstellen, um einige Techniken zu erläuetern.

Zunächst übertrage ich die Liste in eine Variable.

Variable setzen [ $liste ; Beispiel::meinfeld ]

Hier sind natürlich Scriptparameter eleganter; darauf habe ich jedoch aus didaktischen Gründen verzichtet.

Nun bestimme ich die Anzahl der Elemente/Werte* der Liste. Dies benötigte ich, da ich das Problem iterativ per Schleife lösen möchte. Die Anzahl der Elemente benötige ich später als Abbruchbedingung für meine Schleife.

Variable setzen [ $anz ; ElementeAnzahl ( $liste) ]

Der Befehl ElementeAnzahl () ermittelt die Anzahl der Elemente/Werte* meiner Liste, die ich in der Variablen $liste gespeichert habe.

Nun beginne ich mit der Schleife. Eine Schleife wiederholt Befehle so oft bis eine Abbruchbedingung erreicht ist. Die Abbruchbedingung muss sorgfältig formuliert werden, damit die keine Endlosschleife entsteht. Eine Endlosschleife ist eine Schleife, deren Abbruchbedingung nicht erreicht wird.

Arbeiten mit Listen

Arbeiten mit Schleifen

Mit den Befehlen Schleife und EndeSchleife wird die Schleife definiert. Alle Befehle dazwischen werdem immer wieder ausgeführt.

Ich möchte die Schleife verlasssen, wenn ich sie so oft durchlaufen habe, wie es Elemente in der Liste gibt.

Jeden Schleifendurchlauf zähle ich mit der Variablen $i, indem ich $i bei jedem Durchlauf immer um 1 erhöhe.

Also lautet die Abbruchbedingung $i gleich $anz.
Da ich jedoch ein feiger Hund bin, frage ich besser $i größergleich $anz ab. Wer weiß, ob ich das Script nochmal ändern muss und meine Abbruchbedingung $i gleich $anz wird durch diese Änderungen vielleicht irgendwann mal übersprungen.

Da in FileMaker Variblen vom Typ Text sind, verwende ich besser LiesAlsZahl. Somit ist gewährleistet, dass der Ausdruck auch korrekt ausgewertet wird.
Also formuliere ich

Verlasse Schleife wenn [ LiesAlsZahl ( $i ) ≥ LiesAlsZahl ( $anz ) ]

So viel zur Schleife, kommen wir nun zum Inhalt der Schleife.

Ich möchte nun die Liste in Ihre Werte splitten. Dabei hilf mir der Befehl HoleWert. Mit HoleWert kann ich einen beliebigen Wert aus einer Liste ermitteln.

HoleWert [ $liste ; 1 ] gibt den ersten Wert der Liste zurück.
HoleWert [ $liste ; 2 ] gibt den zweiten Wert usw.

Da ich einen Zähler $i einsetze, kann ich den $i-ten Wert der Liste bei jedem Durchlauf auslesen.

Im ersten Schleifendurchlauf ist $i = 1 und somit gibt HoleWert [ $liste ; $i ] den ersten Wert der Liste zurück.

Diese Technik mache ich mir zur Nutze und lege bei jeden Schleifendurchlauf einen neuen Datensatz an und trage den ausgelesenen Wert in ein Feld ein.

Dazu nutze ich die Befehle Neuer Datensatz und Feldwert setzen. Ich denke diese Befehle brauchen nicht weiter erläutert werden.

Im Beispiel könnt Ihr das Script nachvollziehen.

Viel Spaß dabei wünscht Roland Schneider

* Dummerweise benennt FileMaker in der deutschen Lokalisation einerseits Elemente (Anzahl Elemente) andererseits Werte (Hole Wert). Im Englischen wird jedoch nur von „Values“ gesprochen. Die Einheitliche Benennung ist ein Grund mehr für mich mit der englischen Version zu arbeiten. Deshalb sind die Screenshots auch in Englisch 😉

Advertisements