第1个回答 2011-11-01
split功能有限,给你一段代码,VB6的,很久以前写的但是很有效:
说明:这段代码可以实现你的拆分,还可以差分带单引号的字符串;你可以自己再修改提高一下效率,如果处理的数据不多就直接用吧。
ckStr1 是输入字符串
ckRetNum 是返回的拆分后的字符串个数
ckRetStr() 是返回的拆分后的字符串数组
=========================================================================
Option Explicit
Dim mErrString As String
Public Function GetStrArray(ckStr1 As String, ckRetNum As Long, ckRetStr() As String) As Long
Dim Str1 As String, strChr As String, strTemp As String
Dim loStr As Long, i As Long, j As Long, k As Long
Dim vStart As Long, vEnd As Long
Dim tempVar(100) As String, NumOfVar As Long
Dim bVar(300) As String * 1, lenbVar As Long
Dim resVar(300) As String, NumRes As Long
Dim ReadType As Long, ErrCode As Long
Dim addNum As Long, addVar As String
Dim BZ1 As Long
Dim A1
'Debug.Print
'timer1 = Timer
'For k = 1 To 1 '10000
' Str1 = "'pr o d1' G 199 1.2 1 2** -7146 OIL "
BZ1 = 0
ckStr1 = Replace(ckStr1, vbTab, " ")
Str1 = ckStr1
loStr = Len(Str1) '= lenbVar
NumOfVar = 0
For i = 1 To loStr
bVar(i) = Mid(Str1, i, 1)
Next i
i = 1
ReadType = 0
NumRes = 0
ErrCode = 0
Do While i <= loStr
If ReadType = 0 Then
If bVar(i) <> " " And bVar(i) <> "," Then
If bVar(i) = "'" Then
ReadType = 3 '用[']开始
vStart = i + 1
BZ1 = 1
Else
'如果非空,则开始读取数据
ReadType = 2
vStart = i
BZ1 = 1
End If
ElseIf bVar(i) = "," Then
NumRes = NumRes + 1
resVar(NumRes) = ""
ReadType = 0
End If
ElseIf ReadType = 2 Then
If bVar(i) <> " " Then
If bVar(i) = "'" Then
'Debug.Print "Err", i
mErrString = "标记 " & Chr(39) & " 没有匹配的 " & Chr(39)
ErrCode = 1
BZ1 = 0
Exit Do
End If
If bVar(i) = "," Then
strTemp = Mid(Str1, vStart, i - vStart)
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart)
ReadType = 0
End If
Else
strTemp = Mid(Str1, vStart, i - vStart)
NumRes = NumRes + 1
resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
ReadType = 0
BZ1 = 0
End If
If ReadType = 0 Then
'Deal with Star * charactor
If Len(Trim(strTemp)) > 1 Then ' deal with **
If InStr(1, strTemp, "**") <> 0 Then
If Left(strTemp, 2) = "**" Then
'strTemp = "**"
ErrCode = 2
Exit Do
Else
A1 = Split(strTemp, "**")
If Not IsNumeric(A1(0)) Then
ErrCode = 3
Exit Do
Else
addNum = Val(A1(0))
If UBound(A1) > 0 Then
addVar = CStr(A1(1))
Else
addVar = ""
End If
For j = 1 To addNum
NumRes = NumRes + 1
resVar(NumRes) = "1**" & addVar
Next j
End If
End If
'strTemp = ""
Else
'NumRes = NumRes + 1
'resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
End If
Else
' NumRes = NumRes + 1
' resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
' ReadType = 0
' BZ1 = 0
'strTemp = ""
End If
End If
ElseIf ReadType = 3 Then '如果是从[']开始读取数据,并且遇到了匹配的[']结尾
If bVar(i) = "'" Then
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart)
ReadType = 0
BZ1 = 0
'strTemp = ""
End If
End If
i = i + 1
Loop
If BZ1 = 1 Then
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart + 1) 'Mid(Str1, vStart, i - vStart)
'ReadType = 0
End If
If ErrCode <> 0 Then
GetStrArray = -1
Exit Function
'Debug.Print "ErrPosition", vStart
'Debug.Print "Err Code", ErrCode
Else
'Debug.Print "timer", Timer - timer1
ckRetNum = NumRes
ReDim ckRetStr(NumRes - 1)
For i = 1 To NumRes
'Debug.Print resVar(i)
ckRetStr(i - 1) = resVar(i)
Next i
End If
End Function
========================================================================
用法:
dim str2() as string , N1 as long
dim str1 as string
str1="1234 abcd"
GetStrArray str1, N1, str2
debug.print str2(0) '1234
debug.print str2(1) 'abcd本回答被提问者采纳
第2个回答 2011-11-01
空格个数不确定 不能用spilt
你这个题很简单 只有两段 直接用left right就行了
Dim strs As String, a As String, b As String
Dim i As Integer
strs = "1234 abcd" '这儿无论多少空格都没关系
i = InStr(strs, " ")
If i > o Then
a = Trim(Left(strs, i))
b = Trim(Right(strs, Len(strs) - i))
End If
MsgBox a & "," & b
第3个回答 2011-11-01
1、如果两边的长度是固定的,可以用left、right函数直接取,如:left(str1,1)
2、如果两边不固定,用spilt也可以,即用replace函数循环把2、3、4个空格及一个tab都替换成1个空格,如str1=replace(str1,space(4),space(1))。。。str1=replace(str1,Chr(vbKeyTab),space(1))然后在split即可。
第4个回答 2011-11-01
对每一行用两遍split
dim va as variant
dim iA as integer
dim sA as string
va=split(str,' ')
'重新组合成字符串,但已经去掉空格
for ia=lbound(va) to ubound(va)
sa=sa & va(ia)
next
erase va
va=split(sa,chr(9))
第5个回答 2011-11-01
split功能有限,给你一段代码,VB6的,很久以前写的但是很有效:
说明:这段代码可以实现你的拆分,还可以差分带单引号的字符串;你可以自己再修改提高一下效率,如果处理的数据不多就直接用吧。
ckStr1 是输入字符串
ckRetNum 是返回的拆分后的字符串个数
ckRetStr() 是返回的拆分后的字符串数组
=========================================================================
Option Explicit
Dim mErrString As String
Public Function GetStrArray(ckStr1 As String, ckRetNum As Long, ckRetStr() As String) As Long
Dim Str1 As String, strChr As String, strTemp As String
Dim loStr As Long, i As Long, j As Long, k As Long
Dim vStart As Long, vEnd As Long
Dim tempVar(100) As String, NumOfVar As Long
Dim bVar(300) As String * 1, lenbVar As Long
Dim resVar(300) As String, NumRes As Long
Dim ReadType As Long, ErrCode As Long
Dim addNum As Long, addVar As String
Dim BZ1 As Long
Dim A1
'Debug.Print
'timer1 = Timer
'For k = 1 To 1 '10000
' Str1 = "'pr o d1' G 199 1.2 1 2** -7146 OIL "
BZ1 = 0
ckStr1 = Replace(ckStr1, vbTab, " ")
Str1 = ckStr1
loStr = Len(Str1) '= lenbVar
NumOfVar = 0
For i = 1 To loStr
bVar(i) = Mid(Str1, i, 1)
Next i
i = 1
ReadType = 0
NumRes = 0
ErrCode = 0
Do While i <= loStr
If ReadType = 0 Then
If bVar(i) <> " " And bVar(i) <> "," Then
If bVar(i) = "'" Then
ReadType = 3 '用[']开始
vStart = i + 1
BZ1 = 1
Else
'如果非空,则开始读取数据
ReadType = 2
vStart = i
BZ1 = 1
End If
ElseIf bVar(i) = "," Then
NumRes = NumRes + 1
resVar(NumRes) = ""
ReadType = 0
End If
ElseIf ReadType = 2 Then
If bVar(i) <> " " Then
If bVar(i) = "'" Then
'Debug.Print "Err", i
mErrString = "标记 " & Chr(39) & " 没有匹配的 " & Chr(39)
ErrCode = 1
BZ1 = 0
Exit Do
End If
If bVar(i) = "," Then
strTemp = Mid(Str1, vStart, i - vStart)
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart)
ReadType = 0
End If
Else
strTemp = Mid(Str1, vStart, i - vStart)
NumRes = NumRes + 1
resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
ReadType = 0
BZ1 = 0
End If
If ReadType = 0 Then
'Deal with Star * charactor
If Len(Trim(strTemp)) > 1 Then ' deal with **
If InStr(1, strTemp, "**") <> 0 Then
If Left(strTemp, 2) = "**" Then
'strTemp = "**"
ErrCode = 2
Exit Do
Else
A1 = Split(strTemp, "**")
If Not IsNumeric(A1(0)) Then
ErrCode = 3
Exit Do
Else
addNum = Val(A1(0))
If UBound(A1) > 0 Then
addVar = CStr(A1(1))
Else
addVar = ""
End If
For j = 1 To addNum
NumRes = NumRes + 1
resVar(NumRes) = "1**" & addVar
Next j
End If
End If
'strTemp = ""
Else
'NumRes = NumRes + 1
'resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
End If
Else
' NumRes = NumRes + 1
' resVar(NumRes) = strTemp 'Mid(Str1, vStart, i - vStart)
' ReadType = 0
' BZ1 = 0
'strTemp = ""
End If
End If
ElseIf ReadType = 3 Then '如果是从[']开始读取数据,并且遇到了匹配的[']结尾
If bVar(i) = "'" Then
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart)
ReadType = 0
BZ1 = 0
'strTemp = ""
End If
End If
i = i + 1
Loop
If BZ1 = 1 Then
NumRes = NumRes + 1
resVar(NumRes) = Mid(Str1, vStart, i - vStart + 1) 'Mid(Str1, vStart, i - vStart)
'ReadType = 0
End If
If ErrCode <> 0 Then
GetStrArray = -1
Exit Function
'Debug.Print "ErrPosition", vStart
'Debug.Print "Err Code", ErrCode
Else
'Debug.Print "timer", Timer - timer1
ckRetNum = NumRes
ReDim ckRetStr(NumRes - 1)
For i = 1 To NumRes
'Debug.Print resVar(i)
ckRetStr(i - 1) = resVar(i)
Next i
End If
End Function
========================================================================
用法:
dim str2() as string , N1 as long
dim str1 as string
str1="1234 abcd"
GetStrArray str1, N1, str2
debug.print str2(0) '1234
debug.print str2(1) 'abcd本回答被提问者采纳
第6个回答 2011-11-01
空格个数不确定 不能用spilt
你这个题很简单 只有两段 直接用left right就行了
Dim strs As String, a As String, b As String
Dim i As Integer
strs = "1234 abcd" '这儿无论多少空格都没关系
i = InStr(strs, " ")
If i > o Then
a = Trim(Left(strs, i))
b = Trim(Right(strs, Len(strs) - i))
End If
MsgBox a & "," & b
第7个回答 2011-11-01
1、如果两边的长度是固定的,可以用left、right函数直接取,如:left(str1,1)
2、如果两边不固定,用spilt也可以,即用replace函数循环把2、3、4个空格及一个tab都替换成1个空格,如str1=replace(str1,space(4),space(1))。。。str1=replace(str1,Chr(vbKeyTab),space(1))然后在split即可。
第8个回答 2011-11-01
对每一行用两遍split
dim va as variant
dim iA as integer
dim sA as string
va=split(str,' ')
'重新组合成字符串,但已经去掉空格
for ia=lbound(va) to ubound(va)
sa=sa & va(ia)
next
erase va
va=split(sa,chr(9))