Mark Geplaatst: 2 december 2009 Delen Geplaatst: 2 december 2009 Ik heb de volgende custom function gemaakt: Function Name: Test Parameters: Data Test(Data): Data + 1 Wanneer ik deze functie aanroep krijg je als resultaat bijvoorbeeld: Test("1") = 2, Test("2") = 3, etc. Weet iemand hoe ik deze functie zo kan maken dat ik een reeks (variabele lengte) van nummers kan opgeven? Bijvoorbeeld: Test("1357") = 2468, Test("901352") = 012463, etc. Alvast bedankt, Mark Quote Link naar reactie
0 hiker Geplaatst: 2 december 2009 Delen Geplaatst: 2 december 2009 Je bedoelt dus dat niet het getal, maar elk nummer afzonderlijk 1 wordt verhoogd? Quote Link naar reactie
0 andries Geplaatst: 2 december 2009 Delen Geplaatst: 2 december 2009 Deze kan het doen, met parameter _number: Let ( [ $numbers = _number ; _n = Length ( $numbers ) ; _r = "Let ( $i = $i + 1 ; ####FUN#### )" //recursion model ; _f = "Right ( Middle ( $numbers ; $i ; 1 ) +1 ; 1 )" ; _rf = Substitute ( _r ; "####FUN####" ; _f ) ; _fn = Substitute ( ( 10 ^ _n ) - 1 ; 9 ; _rf & "&" ) ] ; Evaluate ( Left ( _fn ; Length ( _fn ) - 1 ) ) //Destroy local variables (empty script stack) & Let ( [ $i = "" ; $numbers = "" ] ; "" ) ) Quote Link naar reactie
0 Mark Geplaatst: 2 december 2009 Auteur Delen Geplaatst: 2 december 2009 @hiker: Exact @andries: Geniaal! Hier ben ik heel blij mee. Bedankt! Quote Link naar reactie
0 Mark Geplaatst: 2 december 2009 Auteur Delen Geplaatst: 2 december 2009 Deze functie zit fascinerend in elkaar. Blijkbaar loopt (van het Engelse woord Loop) deze door de getallenreeks heen. Weet iemand hoe deze truc werkt? Ik heb er een tijdje naar zitten kijken, maar kom er niet uit... Quote Link naar reactie
0 andries Geplaatst: 2 december 2009 Delen Geplaatst: 2 december 2009 (aangepast) De functie heeft zijn eigen recursie model. Wat de functie eigenlijk doet is de volgende string creeeren ( voor parameter "4568"): "Right ( Middle ( 4568 ; 1 ; 1 ) +1 ; 1 ) & Right ( Middle ( 4568 ; 2 ; 1 ) +1 ; 1 ) & Right ( Middle ( 4568 ; 3 ; 1 ) +1 ; 1 ) & Right ( Middle ( 4568 ; 4 ; 1 ) +1 ; 1 )", deze string wordt dan geevalueerd. Dit doet hij door gebruik te maken van zijn eigen recursie model. Om hier aan te geraken maak ik gebruik van twee kleine truckjes: de eerste truck is: 10^n - 1 geeft zoveel negens als n groot is. Daarna kan ik met een eenvoudige substitute een functie dus n keer laten evalueren. De tweede truck zit hem er in dat "locale" variabele, ook bestaan indien er geen script loopt. De variabele worden dan gebruikt als variabele voor de "empty script stack". Daarvoor dient dus de _r lijn die in de custom functie zit. Deze doet eigenlijk het volgende: Let ( $i = $i + 1 ; "FUNCTIE DIE IK WIL EVALUEREN" ) & Let ( $i = $i + 1 ; "FUNCTIE DIE IK WIL EVALUEREN"" ) & ... op die manier wordt er steeds 1 toegevoegd aan $i in de volgende "Let". Op die manier kan je dus zelf je eigen recursief model ontwikkelen, die veel sneller werkt dan FileMakers eigen recursie model. Het idee van dit recursief model is niet van mij, maar heb ik gedeeltelijk van Agnes Barouh. Zij heeft een nog complexer algoritme gebouwd, maar dat is hier niet nodig. Als je wilt zien hoe die werkt moet je maar eens _rf en _fn ipv de hele "evaluate" lijn zetten, dan toont hij hoe hij de string opbouwt. 2 december 2009 aangepast door Gast Quote Link naar reactie
0 andries Geplaatst: 2 december 2009 Delen Geplaatst: 2 december 2009 oeps... op citeer en niet op wijzig geduwd... Quote Link naar reactie
0 Mark Geplaatst: 2 december 2009 Auteur Delen Geplaatst: 2 december 2009 Bedankt voor de uitleg. Erg verhelderend! En ik maar denken dat FileMaker voor mij geen geheimen meer had. Quote Link naar reactie
Vraag
Mark
Ik heb de volgende custom function gemaakt:
Function Name: Test
Parameters: Data
Test(Data): Data + 1
Wanneer ik deze functie aanroep krijg je als resultaat bijvoorbeeld: Test("1") = 2, Test("2") = 3, etc.
Weet iemand hoe ik deze functie zo kan maken dat ik een reeks (variabele lengte) van nummers kan opgeven?
Bijvoorbeeld: Test("1357") = 2468, Test("901352") = 012463, etc.
Alvast bedankt,
Mark
Link naar reactie
7 antwoorden op deze vraag
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.