7,763
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Dim st1 As Long, st2 As Long, et1 As Long, et2 As Long
Private Sub Command1_Click()
Dim FileNumber As Integer, URL As String, i As Long
Dim FileByte() As Byte, sFile() As String
FileNumber = FreeFile
Open "c:\wangzhi.txt" For Binary As #FileNumber
Line Input #FileNumber, URL '取得文件第一行
Close #FileNumber
Debug.Print "url=" & URL
i = LenB(StrConv(URL & vbCrLf, vbFromUnicode)) '第一行字节数
'获取第一行以后的其他行,并保存到字节数组FileByte中
st1 = GetTickCount
FileNumber = FreeFile
Open "c:\wangzhi.txt" For Binary As #FileNumber
Erase FileByte
ReDim FileByte(LOF(FileNumber) - 1 - i)
Get #FileNumber, i + 1, FileByte
Close #FileNumber
et1 = GetTickCount
st2 = GetTickCount
'将其他行写入文件中
FileNumber = FreeFile
Open "c:\wangzhi1.txt" For Binary As #FileNumber
'For i = 1 To UBound(sFile)
Put #FileNumber, , FileByte
'Next
Close #FileNumber
et2 = GetTickCount
Debug.Print "读出内容时间:" & (et1 - st1) / 1000 & "秒", "写入内容时间:" & (et2 - st2) / 1000 & "秒"
End Sub
Sub open_中文檔_一次讀1個檔案_先讀入陣列_再取代翁方綱3字_多檔多取代值操作_ADO() '比DAO快
'0.89100000000326秒 43次 43'檔案數
'0.860000000000582 43 43
'0.796999999998661 43 43
'此43個檔案複製5次後(凡215個檔案,97.0 MB (101,752,580 位元組))亦不過6秒鐘
Dim f As String
Dim f2 As String
Dim fa() As Byte
Dim s As Date, e As Date, i As Long, j As Long, g As Long
Dim ss As Date, ee As Date
Dim fdr As String
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
s = Timer '計時
'取得取代(校對)對照表
cnt.Open "provider=microsoft.jet.oledb.4.0;data source=D:\千慮一得齋\書信\圖書管理\黃沛榮老師助理\!!!新世紀中文詞典\詞典.mdb"
rst.LockType = adLockReadOnly
rst.CursorType = adOpenStatic '速度adOpenForwardOnly>adOpenStatic>adOpenKeyset>adOpenDynamic'前3者差不多!
rst.Open "標楷體漢字總表", cnt '凡20902筆記錄
fdr = "D:\千慮一得齋\書信\圖書管理\黃沛榮老師助理\!!!新世紀中文詞典\程式開發\VBA\Word\新博士論文稿\"
f = Dir(fdr & "*") '凡215個檔案
Do Until f = ""
ss = VBA.Timer
f = fdr & f
f2 = Replace(f, "新博士論文稿\", "新博士論文稿\test\")
If GetAttr(f) = vbNormal + vbArchive Then
Open f For Binary As #1
Open f2 For Binary As #2
ReDim fa(LOF(1)) '取得檔案長度以設定陣列大小(元素數量)
'須要減1因為從陣列元素0開始,http://topic.csdn.net/u/20120611/12/565e09c9-4460-46fe-acb0-a2910068ab71.html?70197
Do While Not EOF(1)
Get #1, , fa '一次讀1個檔案先讀入陣列
Loop
'再取代翁方綱3字為"孫守真"
With rst
Do Until .EOF
'取代unicode標楷體字集為其字之byte值(附註unicode字碼)'<標楷體漢字總表>表中Fields(1)記錄下位元值,Fields(2)記錄上位元值
If InStr(1, fa, .Fields(0), vbBinaryCompare) Then
'fa = Replace(fa, .Fields(0), Format(.Fields(1), "000") & Format(.Fields(2), "000") & "(" & Hex(.Fields(1)) & Hex(.Fields(2)) & ")", , , vbBinaryCompare)
fa = Replace(fa, .Fields(0), "1●", , , vbBinaryCompare)
End If
g = g + 1
If g > 500 Then Exit Do
.MoveNext
Loop
.MoveFirst
g = 0
End With
Put #2, , fa
Reset
i = i + 1
' If i = 2 Then '測試各種開啟記錄集的快慢
' e = Timer: Debug.Print e - s, i, j, rst.CursorType
' Stop 'test
' End If
Debug.Print ee - ss; CInt(FileLen(f) / 1024) & "KB"
End If
f = Dir
j = j + 1
ee = VBA.Timer
Loop
e = Timer
Debug.Print e - s, i & "檔案", j
End Sub
Option Explicit
Private Sub Command1_Click()
Dim FileNumber As Integer, URL As String, i As Long
Dim FileByte() As Byte, sFile() As String
FileNumber = FreeFile
Open "c:\wangzhi.txt" For Binary As #FileNumber
ReDim FileByte(LOF(FileNumber) - 1)
Get #FileNumber, , FileByte
sFile = Split(StrConv(FileByte, vbUnicode), vbCrLf)
URL = sFile(0) '取得文件第一行
Close #FileNumber
'将其他行写入文件中
FileNumber = FreeFile
Open "c:\wangzhi1.txt" For Binary As #FileNumber
For i = 1 To UBound(sFile)
Put #FileNumber, , sFile(i) & vbCrLf
Next
Close #FileNumber
End Sub