|
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.
|