Описание функции
TrimCharsToString
Удаляет повтор указанных символов в строке.
TrimCharsToString(String.s, ReplaceString.s = " ", FindChars.s = " ")
Параметры
String.s | Строка для обработки |
ReplaceString.s |
Строка чем будет заменено. По умолчанию заменена на пробелы |
FindChars.s |
Строка содержащая символы, каждый из которых будет заменён. По умолчанию будут заменены повторы пробелов |
Возвращаемое значение
Возвращает обработанную строку. |
См. также
LTrimChar, RTrimCharПример
EnableExplicit
; https://www.purebasic.fr/english/viewtopic.php?p=588707#p588707
;-TOP by mk-soft, v1.03.3, 30.08.2022
Procedure.s TrimCharsToString(String.s, ReplaceString.s = " ", FindChars.s = " ")
; DisableDebugger
Protected result.s, firstFound, found, size_max, size_replace
Protected *result, *findChars, *c.Character, *fc.Character, *rc.character, *tc.character, *ofs
If Not Bool(String)
ProcedureReturn ""
EndIf
size_max = StringByteLength(String) + SizeOf(Character)
size_replace = StringByteLength(ReplaceString)
*result = AllocateMemory(size_max + size_replace * 4, #PB_Memory_NoClear)
*rc = *result
*c = @String
*tc = @ReplaceString
*findChars = @FindChars
While *c\c
*fc = *findChars
While *fc\c
If *c\c = *fc\c
If Not firstFound
firstFound = #True
If *tc\c
CopyMemory(*tc, *rc, size_replace)
*rc + size_replace
If *rc - *result >= size_max
*ofs = *rc - *result
size_max = MemorySize(*result)
*result = ReAllocateMemory(*result, size_max + size_replace * 4, #PB_Memory_NoClear)
*rc = *result + *ofs
EndIf
EndIf
EndIf
found = #True
Break
EndIf
*fc + SizeOf(Character)
Wend
If Not found
If firstFound : firstFound = #False : EndIf
*rc\c = *c\c
*rc + SizeOf(character)
Else
found = #False
EndIf
*c + SizeOf(Character)
Wend
*rc\c = 0
result = PeekS(*result)
FreeMemory(*result)
ProcedureReturn result
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define String$
String$ =" " + #CRLF$ + #CRLF$ + " Hello World! " + #LFCR$ + #TAB$ + " "
MessageRequester("до", "|" + String$ + "|")
String$=TrimCharsToString(String$, " ", #CR$ + #LF$ + #TAB$ + " ")
MessageRequester("после", "|" + String$ + "|")
CompilerEndIf