[AccessD] Replace multiple spaces with a single space

Stuart McLachlan stuart at lexacorp.com.pg
Mon Nov 16 06:33:12 CST 2009


Efficiency!

Version 1:
SELECT tblElectors.FName, Replace(Replace(Replace(Trim([fname]),"  "," 
"+Chr$(7)),Chr$(7)+" ",""),Chr$(7),"") AS Expr1
FROM tblElectors
WHERE (((Replace(Replace(Replace(Trim([fname]),"  "," "+Chr$(7)),Chr$(7)+" 
",""),Chr$(7),""))<>[fname]));

Version 2:
Function nospaces(str As String) As String
str = Replace(str, "  ", " ")
 If InStr(str, "  ") > 0 Then
     str = nospaces(str)
 End If
 nospaces = str
 End Function

SELECT nospaces([FName]) AS Expr1, tblElectors.FName
FROM tblElectors
WHERE (((nospaces([FName]))<>[fname]));

tblElectors has 4,118,769 records.
There are 6742 problem records.
Version 1 takes 70 seconds on my laptop.
I broke into Version 2 after it had been running for about 15 minutes - Don't know how far it 
had got at that stage. :-(

-- 
Stuart

 

On 16 Nov 2009 at 10:40, Max Wanadoo wrote:

> Why not a straight forward replace function called recursively, viz:
> 
> Option Compare Database
> Option Explicit
> Private str As String
> Function xyz()
>   str = "This          string             has     too       many
> spaces"
>   Call nospaces
> End Function
> 
> 
> Function nospaces() As String
> str = Replace(str, "  ", " ")
> Debug.Print str
> If InStr(str, "  ") > 0 Then
>     Call nospaces
> End If
> End Function
> 
> 
> Max
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan
> Sent: 16 November 2009 10:12
> To: Access Developers discussion and problem solving
> Subject: [AccessD] Replace multiple spaces with a single space
> 
> An rather neat expression to get rid of extra spaces in strings
> i.e.   Convert "This          string             has     too       many
> spaces" to
> "This string has to many spaces" 
> 
> Based on an TSQL set based method in the latest SQLServerCentral newsletter.
> Can either be used directly as an expression in a  query or you could create
> a single line 
> function for it (inline in a query should be more efficient)
> 
> 'uses chr$(7) as a safe substitution character which shouldn't appear in the
> original
> '1. replaces "space + space" with  "space + Chr$(7)"
> '2. replaces "chr$(7) + space" with an empty strings
> '3. replaces left over chr$(7)s with empty strings
> 
> ReduceSpaces = Replace(Replace(Replace(Trim(OriginalString), "  ", " " _
>                + Chr$(7)), Chr$(7) + " ", ""), Chr$(7), "")
> 
> Can be used almost unchanged in a TSQL stored procedure - just replace
> Chr$() with 
> CHAR() and Trim() with LTRIM(RTRIM())  
> 
> 
> -- 
> Stuart
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com





More information about the AccessD mailing list