Vb6 用字符串分割字符串?
如果我有一个字符串,比如:Vb6 用字符串分割字符串?,vb6,split,Vb6,Split,如果我有一个字符串,比如: Dim someStr As String someStr = "NODE TEST ACCESS" 我想把那个字符串分成两个空格。它看起来像是Split() 用字符串(本例中为两个空格)拆分字符串最简单的方法是什么?用两个或两个以上的空格分割就可以了。我不希望拆分为正好两个字符。如果不需要保留空格,可以尝试使用replace命令将每两个字符替换为可以拆分的单个字符 Dim someStr As String Dim someArray()
Dim someStr As String
someStr = "NODE TEST ACCESS"
我想把那个字符串分成两个空格。它看起来像是Split()
用字符串(本例中为两个空格)拆分字符串最简单的方法是什么?用两个或两个以上的空格分割就可以了。我不希望拆分为正好两个字符。如果不需要保留空格,可以尝试使用replace命令将每两个字符替换为可以拆分的单个字符
Dim someStr As String
Dim someArray() as String
someStr = "NODE TEST ACCESS"
someArray = split(Replace$(someStr," ","|"),"|")
如果不需要保留空格,可以尝试使用replace命令将每两个字符替换为可以拆分的单个字符
Dim someStr As String
Dim someArray() as String
someStr = "NODE TEST ACCESS"
someArray = split(Replace$(someStr," ","|"),"|")
好的,在对OP的需求进行了一些澄清之后,我们需要对lardymonkey的想法进行一些补充。因此:
Dim someStr As String
Dim someArray() as String
Dim cLen As Integer 'Keep a count of the current characters in the string
someStr = "NODE TEST ACCESS"
'Strip off one space at a time from groups of >2 spaces
Do
cLen = Len(someStr)
someStr = Replace(someStr, Space$(3), Space$(2))
Loop Until cLen = Len(someStr) 'No more replacements were made in the current iteration
'Now you can use lardymonkey's idea
someArray = Split(Replace$(someStr," ","|"),"|")
好的,在对OP的需求进行了一些澄清之后,我们需要对lardymonkey的想法进行一些补充。因此:
Dim someStr As String
Dim someArray() as String
Dim cLen As Integer 'Keep a count of the current characters in the string
someStr = "NODE TEST ACCESS"
'Strip off one space at a time from groups of >2 spaces
Do
cLen = Len(someStr)
someStr = Replace(someStr, Space$(3), Space$(2))
Loop Until cLen = Len(someStr) 'No more replacements were made in the current iteration
'Now you can use lardymonkey's idea
someArray = Split(Replace$(someStr," ","|"),"|")
对lardymonkey和Bobrodes的回答有一点变化
为什么要将空格替换为“|”?原始字符串本身可能包含“|”,这将产生意外的结果
最好将双空格替换为单空格:
Private Sub Command1_Click()
Dim someStr As String
Dim strArray() As String
someStr = "NODE TEST ACCESS"
someStr = RemoveDouble(someStr, " ")
strArray = Split(someStr, " ")
End Sub
Private Function RemoveDouble(strSource As String, strRemove As String)
Dim strReturn As String
Dim strDouble As String
strDouble = strRemove & strRemove
strReturn = Replace(strSource, strDouble, strRemove)
Do While InStr(strReturn, strDouble) > 0
strReturn = Replace(strReturn, strDouble, strRemove)
Loop
RemoveDouble = strReturn
End Function
对lardymonkey和Bobrodes的回答有一点变化
为什么要将空格替换为“|”?原始字符串本身可能包含“|”,这将产生意外的结果
最好将双空格替换为单空格:
Private Sub Command1_Click()
Dim someStr As String
Dim strArray() As String
someStr = "NODE TEST ACCESS"
someStr = RemoveDouble(someStr, " ")
strArray = Split(someStr, " ")
End Sub
Private Function RemoveDouble(strSource As String, strRemove As String)
Dim strReturn As String
Dim strDouble As String
strDouble = strRemove & strRemove
strReturn = Replace(strSource, strDouble, strRemove)
Do While InStr(strReturn, strDouble) > 0
strReturn = Replace(strReturn, strDouble, strRemove)
Loop
RemoveDouble = strReturn
End Function
如果我正确读取OP的qusetion,他们希望拆分字符串,而不会在返回中得到空结果。使用正则表达式大大简化了这一过程。首先添加对Microsoft VBScript正则表达式5.5的引用。然后,您可以根据您的具体需要调整以下功能
注意,本例中没有错误处理
要使用该功能,请在表单中添加多行文本框和命令按钮,并粘贴以下代码
Private Sub Command1_Click()
Dim aryMatches() As String
Dim i As Integer
Dim strPattern As String
Dim strText As String
Text1.Text = ""
strPattern = "\w+"
strText = "NODE TEST ACCESS"
If SplitString(strPattern, strText, aryMatches) > 0 Then
For i = LBound(aryMatches) To UBound(aryMatches)
Text1.SelText = aryMatches(i) & vbCrLf
Text1.SelStart = Len(Text1.Text)
Next i
End If
End Sub
如果我正确读取OP的qusetion,他们希望拆分字符串,而不会在返回中得到空结果。使用正则表达式大大简化了这一过程。首先添加对Microsoft VBScript正则表达式5.5的引用。然后,您可以根据您的具体需要调整以下功能
注意,本例中没有错误处理
要使用该功能,请在表单中添加多行文本框和命令按钮,并粘贴以下代码
Private Sub Command1_Click()
Dim aryMatches() As String
Dim i As Integer
Dim strPattern As String
Dim strText As String
Text1.Text = ""
strPattern = "\w+"
strText = "NODE TEST ACCESS"
If SplitString(strPattern, strText, aryMatches) > 0 Then
For i = LBound(aryMatches) To UBound(aryMatches)
Text1.SelText = aryMatches(i) & vbCrLf
Text1.SelStart = Len(Text1.Text)
Next i
End If
End Sub
这一次,一个完全不同的答案-使用更“原始”的VB字符串函数。如果你对这些东西感兴趣,这大概是鲍勃·罗德回答的两倍
基本上,我在字符串中移动,注意两个或多个空格的位置,然后一次移动一个字符,直到找到一个非空格。使用此信息,我们可以从字符串中的正确位置拉出子字符串,并将它们复制到预先分配的字符串数组中。我将数组分配为64块。如果我们超过数组中的元素数,我们会将其重新分配64个块
Private Function SplitOnMultiSpaces2(ByVal someStr As String) As String()
Const someStringsChunkLen As Long = 64
Dim someStringLen As Long
Dim someStrings() As String
Dim someStringsIndex As Long
Dim multiSpacePos As Long
Dim nextPos As Long
' Cache the length of the string.
someStringLen = Len(someStr)
' Allocate one chunk of elements initially.
ReDim someStrings(0 To someStringsChunkLen - 1)
' Point to the first element in the array.
someStringsIndex = 0
' Find the first position of more than 1 space.
multiSpacePos = InStr(1, someStr, " ", vbBinaryCompare)
' Special case. If no multi spaces were found, then simply return a single string in the array.
If multiSpacePos = 0 Then
someStrings(0) = someStr
Else
' Point the beginning of the next string to the first character in <someStr>.
nextPos = 1
Do
' Copy the "next string" into the next available array element.
someStrings(someStringsIndex) = Mid$(someStr, nextPos, multiSpacePos - nextPos)
' Move to the second space in the multi-spaces, and iterate until we find a non-space (space = ASCII 32).
nextPos = multiSpacePos + 1
Do
If nextPos = someStringLen Then
Exit Do
End If
nextPos = nextPos + 1
Loop While AscW(Mid$(someStr, nextPos, 1)) = 32
' We now pointing to the beginning of the next string - or at the end of the string.
' Look for the next multi space.
multiSpacePos = InStr(nextPos, someStr, " ", vbBinaryCompare)
' Point to the next array element.
someStringsIndex = someStringsIndex + 1
' If this array element points beyond the current upper bound of the array, then add another chunk to the array.
' We look at the remainder from dividing <someStringsIndex> by <someStringsChunkLen>.
' For instance, if this is element 64, then this is 64 / 64 = 1 remainder 0.
' We can use this simple test because we only resize upwards.
If (someStringsIndex Mod someStringsChunkLen) = 0 Then
' e.g. resize upper bound to 64 + 64 - 1 = 127.
ReDim Preserve someStrings(0 To someStringsIndex + someStringsChunkLen - 1)
End If
Loop Until multiSpacePos = 0
' If we aren't at the end of the string, then copy the remaining values.
If nextPos <> someStringLen Then
someStrings(someStringsIndex) = Mid$(someStr, nextPos)
End If
End If
' Resize down to the proper size.
ReDim Preserve someStrings(0 To someStringsIndex)
' Return the string array.
SplitOnMultiSpaces2 = someStrings()
End Function
Private函数SplitOnMultiSpaces2(ByVal-someStr作为字符串)作为字符串()
Const someStringsChunkLen的长度=64
暗淡的某物和它一样长
Dim someStrings()作为字符串
模糊的某些字符串与索引一样长
暗淡的多空间位置,如长
暗淡的下一个时间尽可能长
'缓存字符串的长度。
someStringLen=Len(someStr)
'最初分配一个元素块。
ReDim someStrings(0到someStringsChunkLen-1)
'指向数组中的第一个元素。
someStringsIndex=0
'查找多于1个空格的第一个位置。
multiSpacePos=InStr(1,someStr,“,vbBinaryCompare)
"特例"。如果没有找到多个空格,只需在数组中返回单个字符串即可。
如果multiSpacePos=0,则
someStrings(0)=someStr
其他的
'将下一个字符串的开头指向中的第一个字符。
nextPos=1
做
'将“下一个字符串”复制到下一个可用数组元素中。
someStrings(someStringsIndex)=Mid$(someStr、nextPos、multiSpacePos-nextPos)
'移动到多个空间中的第二个空间,并进行迭代,直到找到一个非空间(空间=ASCII 32)。
nextPos=多空间POS+1
做
如果nextPos=someStringLen,则
退出Do
如果结束
nextPos=nextPos+1
AscW时循环(Mid$(someStr,nextPos,1))=32
'我们现在指向下一个字符串的开头-或字符串的结尾。
'查找下一个多维空间。
multiSpacePos=InStr(nextPos,someStr,“,vbBinaryCompare)
'指向下一个数组元素。
someStringsIndex=someStringsIndex+1
'如果此数组元素指向数组的当前上限之外,则向数组中添加另一个块。
“我们看一下除以的余数。
'例如,如果这是元素64,则这是64/64=1,余数为0。
“我们可以使用这个简单的测试,因为我们只向上调整大小。
如果(someStringsIndex Mod someStringsChunkLen)=0,则
'例如,将上限调整为64+64-1=127。
ReDim保留某些字符串(0到someStringsIndex+someStringsChunkLen-1)
如果结束
循环直到multiSpacePos=0
'如果我们不在字符串的末尾,则复制其余的值。
如果下一步发生了什么,那么
someStrings(someStringsIndex)=Mid$(someStr,nextPos)
如果结束
如果结束
'将大小调整到适当的大小。
重拨保留某些字符串(0到someStringsIndex)
'返回字符串数组。
SplitOnMultiSpaces2=SomeString()
端函数
这次,一个完全不同的