这个问题做起来很简单,比较容易完成,可是要提高速度却让我头疼
希望高手能给出您最好的方法,问题如下:
有给定的几个字符串变量,这里就假定是3个吧
每个的字符串内包含的字符都一样多
不妨假设如下:
dim a(3) as string,i as long,strLast as string,nLen as long
a(0)="0123456789"
a(1)="abcdefghij"
a(2)="ABCDEFGHIJ"
现在要从每个字符变量中按顺序逐个取出字符并组合在一起,成为一个字符
我的做法如下:
nLen=len(a(0))
for i=1 to nLen
strLast=strLast & mid(a(0),i,1)
strLast=strLast & mid(a(1),i,1)
strLast=strLast & mid(a(2),i,1)
next
处理后的效果如下:
strLast="0aA1bB2cC3dD4eE5fF6gG7hH8iI9jJ"
这个是我需要的结果,但是这样做起来很慢,因为我要处理的字符串很大
a(0)、a(1)、a(2)的长度都很长,大概a(0)包含的字符保存起来有15K左右那么大,在这种情况下,我的方法就不好了,速度很慢,请问各位高手,有没有别的什么方法可以提高速度的?
另外还问个问题,用API如何完成同mid()函数一样功能?
请知道的朋友帮我一把,在此谢谢了!
希望高手能给出您最好的方法,问题如下:
有给定的几个字符串变量,这里就假定是3个吧
每个的字符串内包含的字符都一样多
不妨假设如下:
dim a(3) as string,i as long,strLast as string,nLen as long
a(0)="0123456789"
a(1)="abcdefghij"
a(2)="ABCDEFGHIJ"
现在要从每个字符变量中按顺序逐个取出字符并组合在一起,成为一个字符
我的做法如下:
nLen=len(a(0))
for i=1 to nLen
strLast=strLast & mid(a(0),i,1)
strLast=strLast & mid(a(1),i,1)
strLast=strLast & mid(a(2),i,1)
next
处理后的效果如下:
strLast="0aA1bB2cC3dD4eE5fF6gG7hH8iI9jJ"
这个是我需要的结果,但是这样做起来很慢,因为我要处理的字符串很大
a(0)、a(1)、a(2)的长度都很长,大概a(0)包含的字符保存起来有15K左右那么大,在这种情况下,我的方法就不好了,速度很慢,请问各位高手,有没有别的什么方法可以提高速度的?
另外还问个问题,用API如何完成同mid()函数一样功能?
请知道的朋友帮我一把,在此谢谢了!
Dim a(3) As String
Dim i As Long
Dim strLast As String
Dim nLen As Long
Dim s1() As Byte
Dim s2() As Byte
Dim s3() As Byte
a(0) = "0123456789"
a(1) = "abcdefghij"
a(2) = "ABCDEFGHIJ"
s1 = StrConv(a(0), vbFromUnicode)
s2 = StrConv(a(1), vbFromUnicode)
s3 = StrConv(a(2), vbFromUnicode)
For i = LBound(s1) To UBound(s1)
strLast = strLast + Chr(s1(i))
strLast = strLast + Chr(s2(i))
strLast = strLast + Chr(s3(i))
strLast = Trim(strLast)
Next i
Debug.Print strLast
End Sub
a(0,0)="0";a(0,1)="1";a(0,2)="2";a(0,3)="3";a(0,4)="4";...
a(1,0)="a";a(1,1)="b";a(1,2)="c";a(1,3)="d";a(1,4)="e";...
a(2,0)="A";a(2,1)="B";a(2,2)="C";a(2,3)="D";a(2,4)="E";...
...
for i=1 to nLen
strLast=strLast & a(0,i) & a(1,i) & a(2,i)
next
这样就可以了。
stringS=a(0) & a(1) & a(2)
for i=1 to nLen
strLast=strLast & mid(stringS,i,1) & mid(stringS,nLen+i,1) & mid(stringS,nLen+nLen+i,1)
next
用信息男孩的方法,提升了9%的速度,我的方法用了559ms,他的方法用了497ms
用冰儿马甲的方法,提升速度最明显,可是有中文的情况下就没方法了。
测试的本文长度为50K。马甲啊马甲,请你给出可以兼容中文的方法啊!!
冰儿马甲,请给出兼容中文的方法啊!
可以写一下吗?
我正在等待中啊!
迫切、急切、殷切等待中
也可以不用一个循环分几步来运算
Private Sub Command1_Click()Dim a(3) As String, i As Long
Dim strLast As String, nLen As Long
a(0) = "0123456789"
a(1) = "abcdefghij"
a(2) = "ABCDEFGHIJ"
nLen = Len(a(0))Dim tmp() As String, x As Long, w As Long
w = UBound(a)
x = nLen * w - 1
ReDim tmp(x) As String
For i = 0 To x
tmp(i) = Mid$(a(i Mod w), i \ w + 1, 1)
Next i
strLast = Join(tmp, "")Debug.Print strLastEnd Sub
Private Sub Command1_Click()Dim a(3) As String, i As Long
Dim strLast As String, nLen As Long
a(0) = "0123456789"
a(1) = "abcdefghij"
a(2) = "ABCDEFGHIJ"
a(3) = "一二三四五六七八九十"
nLen = Len(a(0))Dim tmp() As String, x As Long, w As Long
w = UBound(a) + 1
x = nLen * w - 1
ReDim tmp(x) As String
For i = 0 To x
tmp(i) = Mid$(a(i Mod w), i \ w + 1, 1)
Next i
strLast = Join(tmp, "")Debug.Print strLastEnd Sub
提示:将abcdef & ABCDEF & 1234567后再交给该函数。
Private Sub Command1_Click()
Text1.Text = StringGet("小楼楼仙上主妹的也是都是个是个好大大孩笨苯子蛋蛋", 3)
End SubFunction StringGet(ByRef pString As String, ByVal pWidth As Long) As String
Dim tHeight As Long
Dim tBytes() As Byte
Dim tBytes_Length As Byte
tBytes() = pString
tBytes_Length = UBound(tBytes())
tHeight = ((tBytes_Length + 1) \ (2 * pWidth))
Dim tIndex As Long
Dim tIndexLength As Long
Dim tGetX As Long
Dim tGetY As Long
Dim tGetIndex As Long
Dim tOutBytes() As Byte
tIndexLength = pWidth * tHeight * 2 - 1
ReDim tOutBytes(tIndexLength)
For tIndex = 0 To tIndexLength
tGetX = (tIndex \ (2 * tHeight)) * 2 + (tIndex Mod 2)
tGetY = ((tIndex \ 2) Mod tHeight)
tGetIndex = (tGetY * 2 * pWidth) + tGetX
tOutBytes(tIndex) = tBytes(tGetIndex)
Next
StringGet = tOutBytes()
End Function
Sx = (Oi \ (2 * H)) * 2 + (Oi Mod 2)
Sy = ((Oi \ 2) Mod H)
Si = (Sy * 2 * W) + Sx
Private Sub Command1_Click()Dim a(2) As String, i As Long
Dim strLast As String, nLen As Long
a(0) = "小仙妹是个好孩子"
a(1) = "楼上的都是大笨蛋"
a(2) = "楼主也是个大笨蛋"
nLen = Len(a(0))Dim tmp() As String, x As Long, w As Long
w = UBound(a) + 1
x = nLen * w - 1
ReDim tmp(x) As String
For i = 0 To x
tmp(i) = Mid$(a(i Mod w), i \ w + 1, 1)
Next i
strLast = Join(tmp, "")Debug.Print strLastEnd Sub
Debug结果:小楼楼仙上主妹的也是都是个是个好大大孩笨笨子蛋蛋
Dim S(2) As String
Dim S2() As String
Dim S3 As String
Dim L As Long
Dim i As Long
S(0) = "12345678"
S(1) = "abcdefgh"
S(2) = "ABCDEFGH"
L = Len(S(0))
ReDim S2(L)
For i = 1 To L
S2(i) = Mid(S(0), i, 1) & Mid(S(1), i, 1) & Mid(S(2), i, 1)
Next
S3 = Join(S2(), "")