alex77755 писал(а):Prime2. Красивый, но похоже бесконечный. Формирует пустой файл.
У меня работает корректно и в три раза быстрей чем первый(у меня команда4)
- Код: Выделить всё
Sub Комманда1_Click()
Dim a, b, c, d, e, f, g, h As String
Dim i
Open "C:\LOG.txt" For Output As 3
Print #3,
Close #3
Open "C:\LOG.txt" For Append As 3
Print #3, "Мой вариант"
Dim FSO, s
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFile("C:\dat.txt")
s = f.Name & " занимает " & f.Size & " байт"
Print #3, s
Print #3, " Начало работы " & Time
Set f = Nothing
Set FSO = Nothing
Open "C:\dat.txt" For Input As 1
Open "C:\test1.txt" For Output As 2
Print #2,
Close #2
Open "C:\test1.txt" For Append As 2
Do While Not EOF(1)
Input #1, a, b, c, d, e, f, g, h
Print #2, a
i = i + 1
DoEvents
Loop
Close #2
Close #1
Print #3, " обработано строк " & i
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFile("C:\test1.txt")
s = f.Name & " занимает " & f.Size & " байт"
Print #3, s
Print #3, " Конец работы " & Time
Set f = Nothing
Set FSO = Nothing
Close #3
Комманда4_Click
End Sub
Private Sub Комманда4_Click()
Dim FSO As New FileSystemObject
Dim f1 As Object, f2 As Object, f3 As Object
Dim st As String, i, j As Long, k As Long, m() As String
k = 0
Set f1 = FSO.OpenTextFile("c:\dat.txt", ForReading)
Set f2 = FSO.CreateTextFile("c:\test2.txt", True)
Open "C:\LOG.txt" For Append As 3
Print #3,
Print #3, "ФЗО"
Print #3, "начало " & Time
i = Time
While f1.AtEndOfLine = False
DoEvents
If k = 9999 Then
k = k
End If
st = f1.ReadLine
k = k + 1
m = Split(Trim(st), " ")
f2.WriteLine (m(0))
Wend
Set f1 = Nothing
Set f2 = Nothing
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFile("C:\test2.txt")
s = f.Name & " занимает " & f.Size & " байт"
Print #3, "обработано строк " & k
Print #3, s
i = Time
Print #3, "конец " & Time
Print #3,
Close #3
Set FSO = Nothing
Set f3 = Nothing
End Sub
Этот пример обработал файл 1ГБ за 481С. Файл правильный. Я его несколько упростил, но смысл не поменялся.
- Код: Выделить всё
Private Sub Prime6()
Dim FSO As New FileSystemObject
Dim f1 As Object, f2 As Object
Dim st As String, j As Long, m() As String
Set f1 = FSO.OpenTextFile(LogDir, ForReading)
Set f2 = FSO.CreateTextFile("test2.txt", True)
While f1.AtEndOfLine = False
DoEvents
st = f1.ReadLine
m = Split(Trim(st), " ")
f2.WriteLine (m(0))
Wend
Set f1 = Nothing
Set f2 = Nothing
Set FSO = Nothing