menno Posted November 26, 2017 Posted November 26, 2017 (edited) Ofwel CaselessSubstitute, was de vraag in de FM-community van een FM9 gebruiker. Een leuke én lastige vraag. De Substitute()-functie van FM vervangt alleen maar de letterlijke tekst inclusief Upper/Lower-case, dus als je "bob" zoekt, dan worden "Bob", "BOB", "bOB", "boB", "BoB" en "bOb" niet vervangen, alleen "bob". De CF ziet er zo uit: Let ( [ // Lengte van de zoek-string opslaan l = Length ( string ) ; // Zoek eerste incidentie van de string p = Position ( text ; string ; 1 ; 1 ) ; // Pak de tekst vóór de eersse incidentie a = If ( p = 0 ; text ; Left ( text ; p - 1 ) ) ; // Evalueer de functie op de gevonden tekst van deze incidentie str = Evaluate ( Substitute ( function ; [ "$$$" ; Middle ( text ; p ; l ) ] ) ) ; // Kruip door de resterende tekst totdat de string niet meer wordt gevonden result = Case ( p = 0 ; a ; // String isn't found, return full text a & str & CaselessSubstitute ( Middle ( text ; p + l ; Length ( text ) - l ) ; string ; function ) ) ] ; result ) In de (fp7 en fmp12) voorbeeld-bestanden staat dit uitgewerkt. Aandachtspunt 1 is dat je bewerking van je vervang-tekst het beste in het engels kan schrijven. In het Frans of in het Duits werkt een Nederlandse formule niet en engels werkt altijd. Aandachtspunt 2 is dat een multi-replace niet mogelijk is: Substitute ( text ; [ string1 ; vervangvoor1 ] ; [ string2 ; vervangvoor2 ] ) is met CaselessSubstitute() onmogelijk. De formule gebruiken met een multireplace is mogelijk door hem te nesten: CaselessSubstitute ( CaselessSubstitute ( Text ; string1 ; vervangvoor1 ) ; string2 ; vervangvoor2 ) Aandachtspunt 3 is wanneer je simpelweg tekst wilt vervangen, dan moet je dat opgeven als in een formule, dus met extra aanhalingstekens. In het voorbeeld zou de formule dan worden: CaselessSubstitute ( Text ; "bob" ; Quote ( "Piet" ) ) CaselessSubstitute.fmp12.zip CaselessSubstitute.fp7.zip Edited December 4, 2017 by Guest Quote
menno Posted December 3, 2017 Author Posted December 3, 2017 [edit]Naam van het onderwerp aangepast en de functienaam vervangen voor CaselessSubstitute omdat dat de lading beter dekt. Voorbeeldbestand overeenkomstig aangepast en fp7 voorbeeld toegevoegd[/edit] Quote
menno Posted February 10, 2018 Author Posted February 10, 2018 Ik heb de CF en de voorbeeld-bestandjes iets aangepast, zodat zowel een functie als letterlijke tekst kan worden gebruikt om de gevonden strings mee te vervangen. Het aandachtspunt 3 uit het eerste bericht is daarmee vervallen. CaselessSubstitute_v2.fp7 CaselessSubstitute_v2.fmp12 Quote
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.