• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 669
  • Last Modified:

exist a delphi function that could remove more than one space from words?

Hello guys,

I have a table with 10.000 lines with sentences, just like this:

"My father is working at home"

Sometimes, there are sentences with double or more space among words, exemplo:

"She  is here  with Vanessa."

I need a function that could fix it, removing more than one space among words.

thanks
alexandre
0
hidrau
Asked:
hidrau
  • 5
  • 4
  • 2
  • +1
1 Solution
 
ThommyCommented:
There is no Delpi standard function, which will do that.

But I have written a function on my own. Try, if it works for your matters:

function RemoveMoreThanOneSpacesBetweenWords(s:string):string;
var
  p:integer;
begin
  s:=trim(s);
  Repeat
    p:=pos('  ',s);
    if p>0 then delete(s,p+1,1);
  Until p=0;

  result:=s;
end;
0
 
ThommyCommented:
You can check functionality with the attached program...
RemoveMoreThanOneSpacesAroundWor.exe
0
 
Geert GruwezOracle dbaCommented:
just use stringreplace

Text := StringReplace(Text, #32#32, #32, [rfReplaceAll]);

Only double spaces will be changed into single spaces
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
Geert GruwezOracle dbaCommented:
you could run it multiple times if you have more than 2 spaces
0
 
Geert GruwezOracle dbaCommented:
thommy, don't post .exe to see a sample working
it'll just fill up the ee servers

post a code sample instead showing the usage
0
 
ThommyCommented:
Ok, I will not post .exe in future!!!

Here's another version of my function using "stringreplace":

function RemoveMoreThanOneSpacesBetweenWords02(s:string):string;
var
  p:integer;
begin
  s:=trim(s);
  Repeat
    p:=pos('  ',s);
    if p>0 then s := StringReplace(s, #32#32, #32, [rfReplaceAll]);
  Until p=0;

  result:=s;
end;
0
 
hidrauAuthor Commented:
thanks very much
0
 
Geert GruwezOracle dbaCommented:
hidrau ...
you normally share poinx when 1 person gives the idea
and the other one steals the idea
0
 
8080_DiverCommented:
Just out of curiosity, you reference having the data in a TABLE . . . what is the database?
If this is a SQL SERVER table, then you can execute a query to accomplish the substitution of one space for multiple spaces and it would execute a lot faster than doing it row by row.  I believe there is also a corresponding SQL function in most other databases.  
0
 
ThommyCommented:
8080_Diver is right.

For example in ORACLE and SQL Server you can use the REPLACE()-function in an Update-Command to do string replacement for fixed character strings.

But if you have different strings to replace like double or triple spaces, then you either have to write a SQL function or start your update command several times to get all multi-spaces replaced by one space...

0
 
8080_DiverCommented:
Thommy,
If you put the process in a stored proc and have it in a WHILE loop, you can execute it until you get 0 rows affected.  It is still a lot faster than doing it on a row by row basis. ;-)
Remember, SQL Is Your Friend.
0
 
Geert GruwezOracle dbaCommented:
you actually run it until the length of the text is the same before and after the function
the number of rows doesn't need to change
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 5
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now