Jump to content
  • 0

{tag} in textveld vervangen door data uit gerelateerde tabel


herrix

Question

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.

Link to comment

10 answers to this question

Recommended Posts

  • 0

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

Link to comment
  • 0

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?

Link to comment
  • 0
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

Link to comment
  • 0

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

Link to comment
  • 0

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 by Guest
Link to comment
  • 0

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

Link to comment
  • 0

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

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...