Open "C:\2.txt" For Input As 2
Do While Not EOF(1)
Input #2, AA
Debug.Print , AA
DoEvents
Loop
Close #2
в файле всетаки присутствуют строки длиной на один байт меньше.
66МБ. 10 минут. полёт продолжается.
Private Sub Form_Load() '
Dim a, b, c, d, e, f, g, h As String
Dim i
Dim fso, s ' просто чио б узнать размер файла
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("E:\Chunk-13.txt")
s = f.Name & " занимает " & f.Size & " байт"
Debug.Print s
Debug.Print " Начало работы " & Time
Set f = Nothing
Set fso = Nothing
Open "E:\Chunk-13.txt" For Input As 1
Open "E:\2.txt" For Append As 2
Debug.Print
Do While Not EOF(1)
Input #1, a, b, c, d, e, f, g, h
'Debug.Print a, b, c, d, e, f, g, h
Print #2, a
i = i + 1
DoEvents
Loop
Close #2
Close #1
Debug.Print
Debug.Print " обработано строк " & i
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("E:\2.txt")
s = f.Name & " занимает " & f.Size & " байт"
Debug.Print s
Debug.Print
Debug.Print " Конец работы " & Time
Set f = Nothing
Set fso = Nothing
End Sub
Следующие инструкции открывают файл TESTFILE для последовательного чтения.
Open "TESTFILE" For Input As #1
Option Explicit
Private Type mType
b(7) As Byte
End Type
Private Sub Form_Load()
Dim nf1 As Integer, d1(4095) As Byte, a1 As Long, p1 As Long
Dim nf2 As Integer, d2(4095) As mType, a2 As Long
Dim i As Long
Show
Caption = "Wait..."
For a2 = 0 To 4095
d2(a2).b(6) = 13
d2(a2).b(7) = 10
Next a2
nf1 = FreeFile
Open "1.txt" For Binary As #nf1
nf2 = FreeFile
Open "2.txt" For Binary As #nf2
p1 = 1
a2 = 0
Do
a1 = 0
Get #nf1, p1, d1()
Do
For i = 0 To 5
d2(a2).b(i) = d1(a1 + i + 5)
Next i
a2 = a2 + 1
If a2 = 4096 Then
a2 = 0
Put #nf2, , d2()
End If
If d1(a1 + 60) = 10 Then a1 = a1 + 61 Else a1 = a1 + 60
If a1 > 4095 - 60 Then p1 = p1 + a1: Exit Do
Loop
Loop Until EOF(1)
For i = 0 To a2 - 1
Put #nf2, , d2(i)
Next i
Close #nf2
Close #nf1
Caption = "Ok!"
End Sub
d2(a2).b(6) = 13
Get #nf1, p1, d1()
Dimon111 писал(а):не работает потому, что выходной файл получился такого типа:
+322 +1611 +112 -26.316 999999.00 2531.486 0.0942422 0.000
-2806 +2901 +137 -26.316 999999.00 2531.486 0.0942414 0.000
-4166 +1041 +155 -26.316 999999.00 2531.486 0.0942407 0.000
-1480 -2021 +167 26.315 999999.00 2531.486 0.0942400 0.000
+1611
+2901
+1041
-2021
+1611
+2901
+1041
-2021
Dimon111 писал(а):d2 вроде одномерный массив байтового типа. Что означает b(6)?
Dimon111 писал(а):Get #nf1, p1, d1()
Правильно ли я понял, что число байт p1 кладется в массив d1?
Dimon111 писал(а):Было бы очень интересно понять почему этот пример работает так быстро.
Option Explicit
Private Type mType
b(7) As Byte
End Type
Private Sub Form_Load()
Dim nf1 As Integer, d1(4095) As Byte, a1 As Long, p1 As Long
Dim nf2 As Integer, d2(4095) As mType, a2 As Long
Dim i As Long
Show
Caption = "Wait..."
For a2 = 0 To 4095
d2(a2).b(6) = 13
d2(a2).b(7) = 10
Next a2
nf1 = FreeFile
Open "1.txt" For Binary As #nf1
nf2 = FreeFile
Open "2.txt" For Binary As #nf2
p1 = 1
a2 = 0
Do
a1 = 0
Get #nf1, p1, d1()
Do
For i = 0 To 5
d2(a2).b(i) = d1(a1 + i + 10)
Next i
a2 = a2 + 1
If a2 = 4096 Then
a2 = 0
Put #nf2, , d2()
End If
If d1(a1 + 65) = 10 Then a1 = a1 + 66 Else a1 = a1 + 65
If a1 > 4095 - 68 Then p1 = p1 + a1: Exit Do
Loop
Loop Until EOF(1)
For i = 0 To a2 - 1
Put #nf2, , d2(i)
Next i
Close #nf2
Close #nf1
Caption = "Ok!"
End Sub
Dimon111 писал(а):Незнаю, будет ли отображаться правильно, но 5 пробелов вначале строки имеются
+5395 -2159 +349 -0.169 999999.00 2462.244 -0.1395413 0.000
+1738 +3664 +338 -0.066 999999.00 2462.244 -0.1395383 0.000
-3597 +5112 +329 0.027 999999.00 2462.244 -0.1395353 0.000
-3670 +292 +323 -0.047 999999.00 2462.244 -0.1395324 0.000
+1534 -4248 +320 -0.121 999999.00 2462.244 -0.1395294 0.000
+4928 -2387 +322 -0.183 999999.00 2462.244 -0.1395264 0.000
+1849 +3283 +327 -0.080 999999.00 2462.244 -0.1395234 0.000
-3623 +4979 +335 0.002 999999.00 2462.244 -0.1395205 0.000
-4201 +279 +346 -0.059 999999.00 2462.244 -0.1395175 0.000
+980 -4575 +359 -0.116 999999.00 2462.244 -0.1395146 0.000
Private Sub Command1_Click()
Dim FSO As New FileSystemObject, f1 As Object, f2 As Object
Dim st As String, i As Long, j As Long, k As Long, m() As String
Set f1 = FSO.OpenTextFile("c:\test.dat", ForReading)
Set f2 = FSO.CreateTextFile("c:\test2.dat", True)
i = Timer
While f1.AtEndOfLine = False
DoEvents
st = f1.ReadLine
j = Timer
k = k + 1
m = Split(Trim(st), " ")
f2.WriteLine (m(0))
'разкоментируй если хочешь видеть процес обрабоки
'но тогда время 20сек->65сек
' Text1.Text = Str(Round(j - i, 2)) & " сек" & ", обработано " & CStr(k) & " строк"
Wend
Set FSO = Nothing
Set f1 = Nothing
Set f2 = Nothing
MsgBox Round(j - i, 2)
End Sub
m = Split(Trim(st), " ")
f2.WriteLine (m(0))
70: CommonDialog.ShowOpen 'Открытие диалога для задания имени исходного файла
LogDir = CommonDialog.FileName 'Присвоение имени файла
Set f1 = FSO.OpenTextFile(имя входящего файла, ForReading)
Set f2 = FSO.CreateTextFile(имя выходящего, True)
Dimon111 писал(а):Нет, я пытался использовать диалоговое окно чтобы задать имя файла. Можно ли так делать в случае с FSO?
Dimon111 писал(а): страно, но из всех предложеных примеров этот самый быстрый.
Сейчас этот форум просматривают: AhrefsBot и гости: 27