View Single Post
  #5   Report Post  
Posted to microsoft.public.excel.programming
Charles Williams Charles Williams is offline
external usenet poster
 
Posts: 968
Default Accessing substrings quickly

Rick,

Both methods work, but in a slightly different way:

aBytes = StrLongString

gives you a zero-based Byte array containing two bytes for each character
(character number, unicode code page number),
so Chr(aBytes(8)) gives you the 5th character (E) as in the OP's example

aBytes = StrConv(StrLongString, vbFromUnicode)

gives you a zero-based byte array containing one byte for each character
(character number in the current default code page)
so Chr(Abytes(4)) gives you the 5th character (E) as in the OP's example

I favour the 2-byte approach because its easier to recreate
strings/substrings by reassigning the Byte array to a string
strChar = aBytes
gives you back the string from the byte array

Private Sub somebytes()

Dim aBytes() As Byte
Dim StrLongString As String
Dim strChar As String

StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
aBytes = StrLongString
strChar = aBytes
MsgBox strChar

End Sub

Charles
___________________________________
The Excel Calculation Site
http://www.decisionmodels.com

"Rick Rothstein" wrote in message
...
This may be a duplicate posting as I can't see the first one I sent
================================================== ===================

I think you need to convert this statement...

aBytes = StrLongString

to this...

aBytes = StrConv(StrLongString, vbFromUnicode)

in order to get your method to work. Also note that the Byte array that is
produced will always be zero-based even if you have your Option Base set
to 1, so if you want the 8th character in the text, you have to remember
to use 7 as the index to the array.

--
Rick (MVP - Excel)


"Charles Williams" wrote in message
...
If you need to access several of the individual characters in the string,
or handle the characters as numbers, it can be faster to use a Byte
array:

Private Sub somebytes()

Dim aBytes() As Byte
Dim StrLongString As String
Dim strChar As String

StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
aBytes = StrLongString
strChar = Chr(aBytes(8))
MsgBox strChar

End Sub

Charles
___________________________________
The Excel Calculation Site
http://www.decisionmodels.com

"Robert Crandal" wrote in message
...
Do I need to use the "Mid" function each time I want
to access a substring??

For example, rather than using the following:

mysubstring = Mids(src, 5, 1) ' get 5th character/string

can't I use some other array/index notation
like the following:

mysubstring = src(5)

I get the impression that my code would run a lot faster
if I could access my substrings by an index, rather than
making calls to functions such as Mids(), Instr(), etc....

thank u