Jump to content

Substitute zonder hoofdlettergevoeligheid


menno

Recommended Posts

Posted (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 by Guest
Posted

[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]

  • 2 months later...

Join the conversation

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

Guest
Reply to this topic...

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