Shamil Salakhetdinov
shamil at users.mns.ru
Mon Oct 1 06:29:25 CDT 2007
<<<
Indeed for long strings (some 10K) this is so slow that it is hard to
believe.
>>>
Hi Gustav,
Yes, I'm aware of that.
<<<
As we all know, for validation of a user input in a textbox, speed is of
zero practical importance
>>>
Yes, that's clear but:
1) this thread was originated with the request of JC to find the quickest
way to "jam"/CamelCase strings...
2) the original request was about RegEx and VB.NET/C#. The hypothesis was
that RegEx could deliver the quickest solution. This hypothesis isn't yet
proved in this thread...
3) saving even one CPU cycle while programming user input could result in a
lot of saved energy if we count how many computers are currently running all
around the world :) - a kind of kidding you know: of course spending hours
trying to save a second for an algorithm, which validates user input could
be even more waste of energy - but for JC's task saving a sec could result
in significant time gains because of specifics of the business processes of
his customer requesting to "crunch" zillion gigabytes of data...
--
Shamil
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
Sent: Monday, October 01, 2007 12:57 PM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Use Regex - Create Camel Case
Hi Max and Shamil
Max, the main reason for VBA running slow on string concatenation is this
construct:
strResult = strResult & strBit
Indeed for long strings (some 10K) this is so slow that it is hard to
believe.
The traditional work-around is to create a dummy target string and then
replace the chars one by one using Mid().
Here's an example (though path/file names seldom are so long that it
matters):
Public Function TrimFileName( _
ByVal strFileName As String) _
As String
' Replaces characters in strFileName that are
' not allowed by Windows as a file name.
' Truncates length of strFileName to clngFileNameLen.
'
' 2000-12-07. Gustav Brock, Cactus Data ApS, Copenhagen
' 2002-05-22. Replaced string concatenating with Mid().
' No special error handling.
On Error Resume Next
' String containing all not allowed characters.
Const cstrInValidChars As String = "\/:*?""<>|"
' Replace character for not allowed characters.
Const cstrReplaceChar As String * 1 = "-"
' Maximum length of a file name.
Const clngFileNameLen As Long = 255
Dim lngLen As Long
Dim lngPos As Long
Dim strChar As String
Dim strTrim As String
' Strip leading and trailing spaces.
strTrim = Left(Trim(strFileName), clngFileNameLen)
lngLen = Len(strTrim)
For lngPos = 1 To lngLen Step 1
strChar = Mid(strTrim, lngPos, 1)
If InStr(cstrInValidChars, strChar) > 0 Then
Mid(strTrim, lngPos) = cstrReplaceChar
End If
Next
TrimFileName = strTrim
End Function
Shamil, I have not been working with this in C# but I think you are on the
right track using arrays. I hope to find some time to experiment with your
code examples.
As we all know, for validation of a user input in a textbox, speed is of
zero practical importance, but from time to time your task is to manipulate
not one but thousands of strings and then it matters.
/gustav