Ga naar inhoud
  • 0

{tag} in textveld vervangen door data uit gerelateerde tabel


herrix

Vraag

Geplaatst:

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.

10 antwoorden op deze vraag

Aanbevolen berichten

  • 0
Geplaatst:

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

  • 0
Geplaatst:

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?

  • 0
Geplaatst:
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

  • 0
Geplaatst:

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

  • 0
Geplaatst: (aangepast)

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

aangepast door Gast
  • 0
Geplaatst:

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

  • 0
Geplaatst:

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

  • 0
Geplaatst:

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

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.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...