Jump to content
Tuts 4 You

How to remove multispaces from text?


Recommended Posts

Hi guys,

does anyone know any function I could use to remove all unnecessary spaces from a text?


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.


Link to comment

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.

  • Like 1
Link to comment


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.


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
    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
    test al, al                     ; test for zero AFTER its written.
    jnz stlp

    mov eax, [esp+4]

    ret 4

wsptrim endp



  • Like 1
Link to comment

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
Next a 

Debug String.s


  • Like 1
Link to comment
  • 3 weeks later...

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))

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...