rickel Posted August 9, 2008 Posted August 9, 2008 Ik heb een sleutel (numeriek) van 6 posities. Zodra ik een waarde in een sleutelveld neerzet, zou ik graag voorloopnullen gedisplayed tot het aantal van 6 is bereikt. Is dit mogelijk in FMP9? Quote
0 eroos Posted August 9, 2008 Posted August 9, 2008 (edited) Case ( getal < 10 ; "00000" & getal ; getal < 100 ; "0000" & getal ; getal < 1000 ; "000" & getal ; getal < 10000 ; "00" & getal ; getal < 100000 ; "0" & getal ; getal ) Notatie kan wellicht korter... Edited August 10, 2008 by Guest Quote
0 AvD Posted August 10, 2008 Posted August 10, 2008 Ja, dat kan veel korter: Right("00000" & getal;6) Quote
0 eroos Posted August 10, 2008 Posted August 10, 2008 AvD... en wat doe je dan als het getal uit 7 cijfers gaat bestaan in de loop van de tijd? If ( Length ( getal ) > 6 ; getal ; Right("00000" & getal;6) ) zoiets...? Quote
0 AvD Posted August 10, 2008 Posted August 10, 2008 zoiets...? Dat zou zoiets kunnen zijn, afhankelijk van je analyse. Het probleem stelt zich alleen wanneer het zich stelt, als je begrijpt wat ik bedoel. En dat zou zich niet mogen stellen als de analyse OK is. Als je je klantenbestand uitbreid met jaarlijks te hernummeren ID's, ik bedoel als je elke eerste januari terug van 0 begint met een jaarcode ervoor, dan vraag ik altijd hoeveel nieuwe klanten ze dit jaar verwachten: meer dan 9 (grapje!), meer dan 99 (meestal ook een grapje, maar bij vele kleine zelfstandigen niet), meer dan 999 enzovoort. Ik voorzie dan het aantal digits. Als ik per jaar zeker niet meer dan 99 999 facturen verwacht, dan volstaan vijf digits. Elk bedrijf kan dit wel inschatten, desnoods neem je een nul meer. Je vraag is hiermee hopelijk beantwoord. Quote
0 JeanWM Posted August 11, 2008 Posted August 11, 2008 Wat me opvalt is: ...een sleutel (numeriek) van 6 posities Als daar nu meer dan 6 posities zouden voorkomen, zelfs als je er 7 voorziet, wil ik Murphy toch even thuislaten. Kwestie mogelijke relaties niet te breken. Right("00000" & number;Case( Length ( number ) ≤ 6;6;Length ( number ))) kan daar bij helpen. Quote
0 BDK Posted August 13, 2008 Posted August 13, 2008 Ja, dat kan veel korter: Right("00000" & getal;6) wat ik me bij dit soort kwesties wel eens afvraag is: levert zo’n glanzend efficiënte notatie als die van avd ook een efficiëntere afhandeling door filemaker op? of om het anders te stellen: is spaarzaam maar doeltreffend formuleren hetzelfde als efficiënt programmeren in termen van milliseconden, processorwatts en zeespiegelstijging? of betreft het ‘slechts’ een verschil in zweet, RSI en esthetiek? iemand? groet, bdk Quote
0 AvD Posted August 14, 2008 Posted August 14, 2008 Dank zij jou, bdk, heb ik nu geleerd dat het nog korter kan: je bespaart tenminste op de SHIFT-toets. Quote
0 JeanWM Posted August 14, 2008 Posted August 14, 2008 wat ik me bij dit soort kwesties wel eens afvraag is: levert zo’n glanzend efficiënte notatie als die van avd ook een efficiëntere afhandeling door filemaker op? Ge moogt gerust zijn.... of om het anders te stellen: is spaarzaam maar doeltreffend formuleren hetzelfde als efficiënt programmeren in termen van milliseconden, processorwatts en zeespiegelstijging? of betreft het ‘slechts’ een verschil in zweet, RSI en esthetiek? iemand? someFieldResult = If(GetAsNumber(thisFieldValue)=0; "..,,,."; If(GetAsNumber(thisFieldValue)=1; ".,.,,."; If(GetAsNumber(thisFieldValue)=2; ".,,.,."; If(GetAsNumber(thisFieldValue)=3; ".,,,.."; If(GetAsNumber(thisFieldValue)=4; ",..,,."; If(GetAsNumber(thisFieldValue)=5; ",.,.,."; If(GetAsNumber(thisFieldValue)=6; ",.,,.."; If(GetAsNumber(thisFieldValue)=7; ",,..,."; If(GetAsNumber(thisFieldValue)=8; ",,.,.."; If(GetAsNumber(thisFieldValue)=9; ",,,..."; "")))))))))) zal alleen bij beginners indruk maken....terwijl een Case() zelfs beter zou geweest zijn... someFieldResult = Choose(GetAsNumber(thisFieldValue); "..,,,.";".,.,,.";".,,.,.";".,,,..";",..,,.";",.,. ,.";",.,,..";",,..,.";",,.,..";",,,...";"") is al heel wat beter, terwijl someFieldResult = Middle("..,,,..,.,,..,,.,..,,,..,..,,.,.,.,.,.,,.. ,,..,.,,.,..,,,...", TextToNum(thisFieldValue) * 6 + 1, 6) op alle vlakken energie zal besparen en het meest efficient is, terwijl het nog steeds 'verstaanbaar' en 'leesbaar' is. Of nog, iets waar er een toggle als resultaat moet zijn zien we dikwijls iets in de aard van: If(related::fieldStatus = 0 or IsEmpty (related::fieldStatus); 1 ; 0) Alternating is niet nodig: not GetAsBoolean(related::fieldStatus) of zelfs beter Abs(related::fieldStatus – 1) Zowel op vlak van berekeningen als op vlak van scripting is eenvoud nog altijd de kortste, beste en doeltreffendste weg. Quote
0 BDK Posted August 14, 2008 Posted August 14, 2008 @avd dat met die shifttoets is inderdaad waarschijnlijk een direct gevolg van het werken met filemaker: in de loop van de jaren ben ik tot de conclusie gekomen dat er voor hoofdletters toch echt veel handiger functies te verzinnen zijn dan het toch redelijk zinloze markeren van het begin van een zin en als filemaker ergens in een formule hoofdletters wil hebben plaatst het programma ze zelf toch wel. @ jean, prachtig. maar hoe weet je dat Abs(related::fieldStatus – 1) beter is dan not GetAsBoolean(related::fieldStatus) lijkt me iets dat je ergens geleerd moet hebben, want zo op t oog zijn beide formuleringen even kernachtig? de eerste heeft een soort van wederkerigheid in zich (abs ( -1 )) die wellicht een extra cycle vergt maar de tweede heeft dan weer NOT wat weer meer inspanning zou kunnen vergen dan niet NOT? (we zijn nu wel echt op de afdeling haarkloverij beland ) groet, bdk Quote
0 AvD Posted August 14, 2008 Posted August 14, 2008 we zijn nu wel echt op de afdeling haarkloverij beland Quote
0 eroos Posted August 15, 2008 Posted August 15, 2008 ...Zou rickel er wat aan gehad hebben...? Quote
Question
rickel
Ik heb een sleutel (numeriek) van 6 posities. Zodra ik een waarde in een sleutelveld neerzet, zou ik graag voorloopnullen gedisplayed tot het aantal van 6 is bereikt. Is dit mogelijk in FMP9?
11 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.