FileMaker - Tip
152
![]()
|
|
|
Wat u nodig hebt voor deze tip: één glas water (ongeveer 10 cl) - één tot twee aspirientjes (meer mag ook). Deze keer gaan we immers wat dieper in op een bijzonder nuttige functie, namelijk Position. Die dient om de plaats te vinden waar een bepaald teken voorkomt in een tekst. Maar het is wel iets complexer: in feite zoekt Position waar dat teken voor de zoveelste keer voorkomt in het veld, en wel te beginnen vanaf een bepaalde positie. We kunnen die functie bijvoorbeeld gebruiken om de inhoud van een veld op te splitsen in deelinhouden, wanneer die deelinhouden van elkaar gescheiden zijn door een of ander teken. Stel dat het veld Tekst drie gegevens bevat die telkens van elkaar gescheiden zijn door het |-symbool, bijvoorbeeld: hond|kat|vogel. Natuurlijk is elk ander teken mogelijk (ook een spatie, en dat zal vaak voorkomen). We willen de inhoud in drie stukken opsplitsen en die daarna onderbrengen in drie aparte velden die we bijvoorbeeld Inhoud1, Inhoud2 en Inhoud3 noemen. Om het meest linkse groepje tekens te vinden (hond) zouden we de Left-functie kunnen gebruiken, alleen weten we niet op voorhand hoeveel tekens het woord lang zal zijn: 4 voor hond, maar 3 voor vlo en 26 voor hondenhokdeurtjesscharnier. Voor het meest rechtse woord dachten we aan de Right-functie, maar die geeft hetzelfde probleem. En van het middelste woord kunnen we alleen maar dromen: waar begint het en waar eindigt het? Voor dat woord kunnen we noch Left, noch Right gebruiken: hier hebben we Middle nodig. Middle gaat in een tekst op zoek naar een tekenreeks (een string) die begint op een bepaalde plaats en die eindigt op een andere. (Neem hier het eerste aspirientje) We moeten dus in elk geval te weten komen waar dat ellendige |-teken staat. Gelukkig hebben we daar een functie voor: Position (trompetgeschal en trommelslag). Het knappe is dat, wanneer we de plaats van die tekens kunnen bepalen, we voor de drie woorden dezelfde formule kunnen gebruiken. Laten we het voorbeeld geven voor Inhoud3. Middle(Tekst;Position(Tekst;"|";1;3-1) + 1;Position(Tekst & "|";"|";1;3) - Position(Tekst;"|";1;3-1)-1) Ter verduidelijking eerst nog even de parameters van Position uitleggen: Position(text; search string; start; occurrence) Text is hier de naam van ons veld. Search string is het teken dat we zoeken (|). Start is waar we het zoeken starten, namelijk op positie 1. Occurrence is het getal dat weergeeft welk "voorkomen" we zoeken: de eerste keer dat het teken voorkomt, of de tweede keer, of de derde keer enzovoort. Hier zoeken we dus naar de plaats waar het |-teken voor het eerst voorkomt (en wel te beginnen vanaf het eerste teken). Voor de velden Inhoud1 en Inhoud2 moeten we de 3 uit de formule vervangen door respectievelijk de waarden 1 en 2. Natuurlijk geeft dit voor Inhoud1 een wel wat vreemde formule (omdat er dan 1 - 1 in staat), maar we hebben wel het voordeel dat we voor alle velden kunnen werken met een en dezelfde formule. Voor Inhoud1 zouden we ook gebruik kunnen maken van een andere calculatie, namelijk gebaseerd op de Left-functie (we hebben immers iets nodig dat links begint). En voor het laatste veld (in ons geval Inhoud3) iets analoogs gebaseerd op de Right-functie (omdat we iets nodig hebben dat rechts staat). Voor Inhoud1 geeft dit: Left(Tekst;Position(Tekst;"|";1;1) - 1) en voor Inhoud3: Right(Tekst;Position(Tekst;"|";3;1)) (Neem hier het tweede aspirientje) Voor degenen onder u die nog aspirientjes over hebben: Tip 201. |
avd@avd-ci.be - contactformulier