FileMaker - Tip 201

 

Klik op om terug te keren naar het selectiemenu.

Tip 201 - Het verschil tussen de Replace- en de Substitute-functie

Beide functies hebben tot doel in een veld bepaalde dingen te vervangen door andere dingen. De functionaliteit is dus dezelfde: iets vervangen door iets anders. Maar de twee functies doen dat elk op hun eigen manier, en dat kan soms tot verrassingen leiden.

Iemand krijgt een databank toegezonden met daarin een veld Deelnemers waarin telkens vijf voornamen staan gescheiden door een komma en een spatie:

Frank, Kathleen, Bert, Bram, Karel,

Het vervelende is dat op elke record na de laatste voornaam óók een komma en een spatie staat, en die moeten weg: na "Karel" mag er niets meer komen. Weg dus met die komma en die spatie!

Het lijkt dan ook logisch om in de hele databank voor dat veld de laatste twee tekens te vervangen door niets. De laatste twee tekens van Deelnemers vinden we gemakkelijk door de Right-functie te gebruiken. De formule

Right(Deelnemers;2)

geeft de laatste twee tekens van de gegevens in het veld Deelnemers. Om die door niets te vervangen gebruikt de vraagsteller de Substitute-functie. Die functie zit niet zo moeilijk in mekaar. Ze heeft drie parameters

De veldnaam: over welk veld gaat het
De te vinden string: wat moeten we vervangen?
De vervang-string: wat moet er in de plaats komen.

 

Dat werd dan

Substitute(Deelnemers; Right(Deelnemers;2);"").

Op die manier zouden de laatste komma en de daaropvolgende spatie vervangen worden door niets ("").

Even geprobeerd en... Oh wee! Alle komma's weg, en ook alle spaties!

Hoe kan dat nu? We vroeger toch alleen maar Right(Deelnemers;2)?

Natuurlijk, maar Right(Deelnemers;2) is ", ", een komma gevolgd door een spatie. En in onze Substitute-formule hebben we toch gevraagd dat te vervangen door niets! FileMaker heeft dus precies gedaan wat we gevraagd hadden (hoewel dat natuurlijk niet de bedoeling was...): overal de combinatie (komma + spatie) vervangen door niets!

Hoe moet het dan? Substitute liep mis omdat het eigenlijk een tekst-functie is: we vervangen een stukje tekst door iets anders.

Replace doet dat ook, maar die vervangt niet een opgegeven stukje tekst, maar wel al wat op een bepaalde positie staat. Replace werkt dus eigenlijk met posities. Daarom zijn er ook vier parameters, en niet drie:

 

De veldnaam: over welk veld gaat het?
De beginpositie: vanaf waar moeten we vervangen?
De lengte van de te vervangen string: tot waar moeten we vervangen?
De vervang-string: wat moet er in de plaats komen?

 

In ons geval moeten we dus beginpositie en lengte aangeven van de laatste twee tekens. Het eerste doen we met de Position-functie*. Voor het tweede hebben we enkel het cijfer 2 nodig.

Beginpositie = Position(Deelnemers;", ";1;5)
Lengte van de te vervangen string = 2

 

Onze Replace-formule ziet er dan zo uit:

 

Replace(Deelnemers; Position(Deelnemers;", ";1;5); 2;"")

 

Nu werkt het wel, natuurlijk: we houden alle komma's en spaties over, behalve diegene die staan op het einde van de reeks.

 

Belangrijke opmerking

Tot en met FileMaker 5.5 was er nogal wat verwarring mogelijk in verband met Replace: dit was namelijk zowel een functie als een menu-commando (onder het menu item Records). Je kon dus het Replace...-commando oproepen (CTRL+=) en daar de laatste optie kiezen, namelijk Replace by Calculation. In het formulevenster dat dan volgde kon je zowel de Replace- als de Substitute-functie gebruiken. Dit leidde vaak tot verwarring. Vanaf FileMaker 6 is dat gedaan: het menu-item Replace... heet nu Replace Contents...

 

Zie ook Tip 174, Tip 196 en Tip 215.


* De Position-functie wordt toegelicht in Tip 152.

 
avd@avd-ci.be - contactformulier