Mindphazer wrote: Fri Feb 28, 2025 7:31 pm
I used such a function in one of my programs...
You calculate the length of the line on each iteration
Mindphazer wrote: Fri Feb 28, 2025 7:31 pm
Code: Select all
ReplaceString(Texte, Char, "e", #PB_String_InPlace)
You can use the "i" variable as the "StartPosition" parameter to make a shift to the desired position, instead of searching from the beginning.
You lose the letter register (case).
I used character-by-character string parsing
Code: Select all
Procedure ReplaceAccent(*c.Character)
If *c = 0 Or *c\c = 0
ProcedureReturn 0
EndIf
While *c\c
Select *c\c
Case 'é', 'è', 'ê', 'ë'
*c\c = 'e'
Case 'à', 'ä', 'â'
*c\c = 'a'
Case 'ù', 'ü', 'û'
*c\c = 'u'
Case 'ï', 'î'
*c\c = 'i'
Case 'ô', 'ö'
*c\c = 'o'
Case 'É', 'È', 'Ê', 'Ë'
*c\c = 'E'
Case 'À', 'Ä', 'Â'
*c\c = 'A'
Case 'Ù', 'Ü', 'Û'
*c\c = 'U'
Case 'Ï', 'Î'
*c\c = 'I'
Case 'Ô', 'Ö'
*c\c = 'O'
EndSelect
*c + SizeOf(Character)
Wend
EndProcedure
tmp.s="dféöке'É', 'È', 'Ê', 'Ë"
ReplaceAccent(@tmp)
Debug tmp
Can be specified by
ASCII-Codes ranges
Code: Select all
Procedure ReplaceAccent(*c.Character)
If *c = 0 Or *c\c = 0
ProcedureReturn 0
EndIf
While *c\c
Select *c\c
Case 'è' To 'ë' ; 232-235
*c\c = 'e'
Case 'à' To 'å' ; 224-229
*c\c = 'a'
Case 'ù' To 'ü' ; 249-252
*c\c = 'u'
Case 'ì' To 'ï' ; 236-239
*c\c = 'i'
Case 'ò' To 'ö' ; 242-246
*c\c = 'o'
Case 'È' To 'Ë' ; 200-203
*c\c = 'E'
Case 'À' To 'Å' ; 192-197
*c\c = 'A'
Case 'Ù' To 'Ü' ; 217-220
*c\c = 'U'
Case 'Ì' To 'Ï' ; 204-207
*c\c = 'I'
Case 'Ò' To 'Ö' ; 210-214
*c\c = 'O'
EndSelect
*c + SizeOf(Character)
Wend
EndProcedure
Define tmp.s="dféöке'É', 'È', 'Ê', 'Ë"
ReplaceAccent(@tmp)
Debug tmp
ASCII-Codes