herrix Posted September 30, 2006 Share Posted September 30, 2006 Goedemorgen, ik loop vast op het onderstaande probleem. Wellicht kan iemand mij helpen met een custom-functie. Ik wil uit de tekst: Bla bla bla bla {tag1} blabla bla bla {tag2} bal bla {tag4} de waardes vervangen door de gegevens uit een andere tabel, nl tag1 waarde1 tag2 waarde 2 tag3 waarde 3 tag4 waarde 4 Niet alle waardes uit de tabel worden gebruikt in het textveld en de waardes worden in meerdere records gebruikt. Poeh... ik weet het niet meer... Alvast bedankt, Herrix. Quote Link to comment
0 rmw Posted September 30, 2006 Share Posted September 30, 2006 Zonder de formule in FM te hebben gecontroleerd (dus let even op bij het kopieren) substitute ( veld met tekst ; [ "{tag1}" ; veld met waarde1 ] ; [ "{tag2}" ; veld met waarde2 ] ; [ "{tag3}" ; veld met waarde3 ] ; [ "{tag4}" ; veld met waarde4 ] ) Deze berekening zet je in een nieuw veld (van het type berekening). 'veld met tekst' is de naam van het veld waarin 'bla bla' is opgenomen 'veld met waarde' is de naam van het veld waarin de waarden zijn opgeslagen HTH rmw Quote Link to comment
0 herrix Posted September 30, 2006 Author Share Posted September 30, 2006 Mwah, ware het niet dat de gerelateerde tabel maar twee velden heeft en ik gebuik wil maken van een ongelimiteerd aantal velden in de gerelateerde tabel. Jouw oplossing lijkt mij voor 10 velden nog te doen, voor 100 niet meer. Zeker niet als ik met verschillende {tag}namen wil werken. De gebruiker bepaalt de tagnamen, ik niet. Iemand anders? toch recursive functie? Quote Link to comment
0 rmw Posted September 30, 2006 Share Posted September 30, 2006 ware het niet dat de gerelateerde tabel maar twee velden heeft en ik gebuik wil maken van een ongelimiteerd aantal velden in de gerelateerde tabel En hoe ga je dan bepalen welk gerelateerd record je wilt gebruiken? Door het tag nummer te gebruiken? ...toch recursive functie? Dat kan alleen met een custom functie in FM8Advanced. Beide kunnen, zie bijgevoegd voorbeeld. En voor wie geen custom functies kan inzien: Let ( [ xAanwezig = Position ( deTekst ; deScheidingStart & deZoek ; 1 ; 1 ) ] ; If ( xAanwezig ; Let ( [ xLengte = Position ( deTekst ; deScheidingStop ; 1 ; 1 ) - xAanwezig - Length ( deScheidingStart & deZoek ) ; xNummer = GetAsNumber ( Middle ( deTekst ; xAanwezig + Length ( deScheidingStart & deZoek ) ; xLengte ) ) ; xNieuweTekst = Substitute ( deTekst ; GetAsText ( deScheidingStart & deZoek & xNummer & deScheidingStop ) ; GetNthRecord ( deVervanging ; xNummer ) ) ] ; VervangTags ( xNieuweTekst ; deScheidingStart ; deZoek ; deScheidingStop ; deVervanging ) ) ; deTekst ) ) rmw Vervangen.fp7 Quote Link to comment
0 herrix Posted October 1, 2006 Author Share Posted October 1, 2006 Ja, dit komt zeker in de richting die ik bedoel... Ik ga ermee puzzelen en zla je laten weten of het gelukt is! Alvast bedankt. Quote Link to comment
0 herrix Posted October 1, 2006 Author Share Posted October 1, 2006 rmw, de getNthRecord werkt goed zo, die had ik ook bedacht, maar als je 1 record uit de tabel van tags haalt, loopt het scheef. Het systeem zou een beetje op een XML achtig iets moeten lijken denk ik dan... text die tag1 vervangt text die ding1 vervangt en dan de tekst zoals jij hebt. vul hier {tag1} in: nu {ding1}: en tenslotte {tag1} Dus onafhankelijk van de nth record, maar puur op de waarde van veld 1, die vervangen wordt door veld 2. Poeh, even denken om het uit te leggen, hoor... (1 nadeel: gbruiker wil alleen {} als delimiter gebruiken...) Quote Link to comment
0 rmw Posted October 1, 2006 Share Posted October 1, 2006 (edited) Het bepalen van de op te halen gerelateerde waarde kan volgens mij slechts op twee manieren: 1. via GetNthRecord en een altijd relatie Dit is te doen in een calculatie (maar heeft het nadeel dat jij noemt: records verwijderen stuurt de zaak in het honderd) 2. via een relatie waarvan de startwaarde wordt ingesteld. Dit kan niet zonder meer in een calculatie, omdat de waarde waarop de relatie wordt gestart in een (ander) veld moet staan. Hiervoor is een plug-in nodig die een script in een berekening kan starten. Ik zie dat nog niet direct gebeuren, maar ik heb murtje al wel aan het goochelen gezien... Mijn voorkeur gaat uit naar optie 1. Het is verdedigbaar dat een tag een nummer heeft en dat je moet zorgen dat dat niet veranderd. Jou voorbeeld van de mogelijke XML code doet me aan een derde optie denken: 1 groot tekstveld waarin alle tags zijn gedefinieerd. Deze kunnen met een berekening worden opgezocht. Dat maakt het onderhouden van de tags echter niet gebruiksvriendelijk. rmw Edited October 1, 2006 by Guest Quote Link to comment
0 herrix Posted October 1, 2006 Author Share Posted October 1, 2006 Dat XML verhaal klopt... ik ben nu aan het truuken met een sumtext (filemaker 7, sorry), die de gerealteerde waarden in een textveld zet, IN de tabel waar ze vervangen moeten worden... Nu nog uitlezen zonder dat ik de tags hoef bij te houden. Dan lijkt het probleem van het gerelateerde opgelost, alleen nog de custom functie die {tagxx} vervangt door de XML node ... 't wordt langzaam duidelijk... Quote Link to comment
0 rmw Posted October 1, 2006 Share Posted October 1, 2006 Zoiets. rmw Vervangen2.fp7 Quote Link to comment
0 Jeroen Aarts Posted October 2, 2006 Share Posted October 2, 2006 Het voorbeeld van rmw is wel mooi, maar bevat natuurlijk nog altijd het nadeel dat de tag zelf intrinsiek een verwijzing moet hebben naar de tagwaarde in de tag-tabel (hetzij via positie, hetzij anders). Je kan het volledig over een andere boeg gooien en het via een script oplossen: - je script scant je tekst veld op de tag begin- en eindtekens '{' en '}' - je script selecteert een voor een de tags (Set selection script stap) - je script zet de tag in een global en lost via een relatie tussen deze global en de tagtabel de waarde van de tag op Voordeel is dat je (of de gebruiker) volledig dynamisch je tagtabel kan samenstellen met tags en de waarden van deze tags via een relatie ophaalt. Ik gebruik deze techniek met succes in een uitgebreid documentbeheersysteem waarin users zelf tags kunnen beheren. - Jeroen Quote Link to comment
0 herrix Posted October 3, 2006 Author Share Posted October 3, 2006 JA! Dat is pecies de oplossing die ik zoek... het met een script draaien is inderdaad mooier, maar dit is sneller in de omgeving die ik gebruik. Wederom geholpen. Danku. Quote Link to comment
Question
herrix
Goedemorgen,
ik loop vast op het onderstaande probleem. Wellicht kan iemand mij helpen met een custom-functie.
Ik wil uit de tekst:
de waardes vervangen door de gegevens uit een andere tabel, nl
Niet alle waardes uit de tabel worden gebruikt in het textveld en de waardes worden in meerdere records gebruikt.
Poeh... ik weet het niet meer...
Alvast bedankt,
Herrix.
Link to comment
10 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.