投稿日 | : 2004/06/01(Tue) 08:19 |
投稿者 | : 花ちゃん |
Eメール | : |
URL | : |
タイトル | : Re: 英数字以外の削除の仕方 |
この場合の処理は文字列の連結に99.5%かかっており、比較の部分は0.5%しかかかって
いません。
従って、文字列の連結をいかに早くするかにあります。
文字列が短い場合は連結も時間はかからないのですが、長くなると極端に遅くなります。
そこである程度までは、都度連結し、ある程度長くなったら連結をつなぎ変えます。
説明するより下記を試して見て下さい。
私のマシンでは、48.6 秒→ 1.1 と極端に早くなりました。
(あまりにも早いので間違っていないか心配ですが!。(^_^) )
Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Sub Command1_Click()
Dim lngStartTime As Long
Dim strOneLineDat As String
Dim strTemp As String
Dim strTemp1 As String
Dim intLoop As Integer
Dim intAsc As Integer
Dim dat As String
Dim i As Integer
strOneLineDat = "aAcd-0324-PあOI*POいL\AA"
lngStartTime = timeGetTime
strTemp = ""
strTemp1 = ""
For i = 1 To 10000
For intLoop = 1 To Len(strOneLineDat)
dat = Mid$(strOneLineDat, intLoop, 1)
intAsc = Asc(dat)
If (intAsc >= 97 And intAsc <= 122) _
Or (intAsc >= 65 And intAsc <= 90) _
Or (intAsc >= 48 And intAsc <= 57) Then
strTemp1 = strTemp1 & dat
If Len(strTemp1) > 50 Then
strTemp = strTemp & strTemp1
strTemp1 = ""
End If
End If
Next intLoop
Next i
strOneLineDat = strTemp & strTemp1
Label1.Caption = "timeGetTime : " & (timeGetTime - lngStartTime) / 1000
End Sub