ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Accessing substrings quickly (https://www.excelbanter.com/excel-programming/437371-accessing-substrings-quickly.html)

Robert Crandal

Accessing substrings quickly
 
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




Rick Rothstein

Accessing substrings quickly
 
The Mid function is one of VB's fastest executing functions... you won't
find a faster way to extract a character from a string than it.

--
Rick (MVP - Excel)


"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





Charles Williams

Accessing substrings quickly
 
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







Rick Rothstein

Accessing substrings quickly
 
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








Rick Rothstein

Accessing substrings quickly
 
This may be a triplicate posting as I can't see the first two I posted.
I removed your original message in case that was the problem.
================================================== =====================

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

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












All times are GMT +1. The time now is 08:51 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com