FileMaker - Tip 144

 

Klik op om terug te keren naar het selectiemenu.

Tip 144 - TextToNum-problemen met Y, N, T en F en dergelijke

Iemand wil in een veld alle letters verwijderen om uitsluitend de cijfers over te houden. Wanneer in het veld bijvoorbeeld iets staat als AAH231, dan wil hij alleen 231 zien. Een goed idee leek het om de functie TextToNum te gebruiken. Voor de cijfers zou deze functie gewoon de cijfers teruggeven, en voor de letters niets. Logisch, niet?

Grote verrassing bij het uitvoeren van de functie: alle letters zijn inderdaad verdwenen, maar met de letters f, n, t en y bleek er een probleem: die waren wel verdwenen, maar vervangen door de waarden 0, 0, 1 en 1. Een bug?

Nee, geen bug. FileMaker beschouwt deze letters als booleaanse waarden*:

 

f = F = 0 = false

n = N = 0 = no

t = T = 1 = true

y = Y = 1 = yes

 

Je moet er maar aan denken...

Het staat trouwens ook wel in de online help. We vinden die info in het hoofdstuk "Finding numbers, dates and times".

Het verrassende is dat ook de letters die na deze vier komen genegeerd worden: het woord Thomas bijvoorbeeld wordt met TextToNum gewoon omgezet tot 1, net zoals het woord True (en natuurlijk ook Yes)! Het krasse is dat FileMaker dat ook doet voor een zinnetje dat met een van die letters begint: "Tergend langzaam kwam zij naar hem toe" wordt gewoon omgezet naar 1 en "Fijn dat je er bent" naar 0! Maar "Fijn dat je er bent 408" wordt omgezet naar 408 (met of zonder spatie tussen bent en 408). En het wordt nog fraaier: de niet-Engelse versies van FileMaker gaan nog een stapje verder door ook de equivalenten van die letters in dit rare verhaal te betrekken, maar dat hebben we niet kunnen nagaan.

Voor de moedigen die nog volgen: met haakjes gebeurt ook zoiets. Zij worden beschouwd als de indicatoren van negatieve waarden:

23 = 23
(23) = -23

En het wordt nog erger: (true) tussen haakjes is niet -1 zoals men zou verwachten, maar [blank], niks dus!

Hoe vermijden we nu onverwachte toestanden als we TextToNum toch ooit moeten gebruiken? Dat is gelukkig heel eenvoudig: laat het functie-argument met de letter a beginnen:

TextToNum("a" & Tekstveld)


* Die kennen we misschien nog van de booleaanse algebra.

 
avd@avd-ci.be - contactformulier