LCF-AT Posted February 22, 2022 Posted February 22, 2022 Hi guys, does anyone know any function I could use to remove all unnecessary spaces from a text? Example: Here I have some text between spaces & tabs I want to trim to one spaces between! = Text above should change to this text below Here I have some text between spaces & tabs I want to trim to one spaces between! Something like this.Just asking before whether there is already any module XY function I could use before trying to write any own function for this.Thanks. greetz
aIjundi Posted February 23, 2022 Posted February 23, 2022 So want want to replace tabs and multiple spaces with just a single space? You can use regex replace for that. Replace "[\t ]+" with " ". This will leave trailing spaces at the beginning and end. Remove spaces at the start by replacing "^[\t ]+" with empty text. Remove spaces at the end by replacing "[\t ]+$" with empty text. 1
LCF-AT Posted February 23, 2022 Author Posted February 23, 2022 Hi, thanks for the info but I can not use RegEx.Don't have any good working lib code for that (MASM).Just remember years ago I tried to do something with RegEx but could not do everything because of some lib limitations. So now I found a old asm file called "sptrim.asm" from MASM package what does it with a litte adaptation. OPTION PROLOGUE:NONE OPTION EPILOGUE:NONE align 4 wsptrim proc src:DWORD ; --------------------------------------------------------------- ; remove any white space duplicates and substitute a single space ; --------------------------------------------------------------- mov ecx, [esp+4] xor eax, eax sub ecx, 1 mov edx, [esp+4] align 4 stlp: add ecx, 1 mov al, [ecx] cmp al, 9 jne @F mov al, 32 ; replace tabs with spaces @@: cmp al, 32 jne @F cmp BYTE PTR [ecx+1], 32 ; test for next space je overit cmp BYTE PTR [ecx+1], 9 ; test for next tab je overit @@: mov [edx], al add edx, 1 overit: test al, al ; test for zero AFTER its written. jnz stlp mov eax, [esp+4] ret 4 wsptrim endp OPTION PROLOGUE:PrologueDef OPTION EPILOGUE:EpilogueDef greetz 1
Teddy Rogers Posted February 24, 2022 Posted February 24, 2022 Crude and simple code in PureBasic... String.s = "Here I have some text between spaces" + Chr(13) + " & tabs I want to trim to one" + Chr(13) + "spaces between!" String.s = ReplaceString(String.s, " ", " ") String.s = ReplaceString(String.s, " ", " ") For a = 1 To Len(String.s) b = FindString(String.s, Chr(13), a) If b String.s = ReplaceString(String.s, " ", "", #PB_String_CaseSensitive, b, 1) a = b EndIf Next a Debug String.s Ted. 1
CodeExplorer Posted March 12, 2022 Posted March 12, 2022 I've thought on something like this (pseudocode): if a space found check the next char while (next char is space) increment space_counter now we have old position of string and size to be removed = space_counter should be trivial from here. For removing chars you should use memcpy(source, destination, size): memcpy(string+old_position+space_counter, string+old_postion+space_counter, size_of_string_after(old_position+space_counter))
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now