- 日時: 2011/04/05 13:16
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][基本コード] * * キーワード:高速化,検索,文字列の連結,置換え,配列処理, * ***********************************************************************************
----------------------------------------------------------------- Re: 英数字以外の削除の仕方 - 花ちゃん 2004/06/01-08:19 No.9107 -----------------------------------------------------------------
この場合の処理は文字列の連結に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
|