Нужно установить "конец файла" после чтения методом get в середине, всё что находится справа нужно стереть. Функция eof данный вопрос не решает.
Нужно установить "конец файла" после чтения методом get в середине, всё что находится справа нужно стереть. Функция eof данный вопрос не решает.alex_11
Public Sub getFile() Dim buf As String Dim l As Long Open "d:\Temp\test\excel\test.txt" For Binary As #1 l = LOF(1) buf = String(l, Chr(0)) Get #1, , buf Close #1 buf = Left(buf, l \ 2) Debug.Print Len(buf)
Kill "d:\Temp\test\excel\test.txt" Open "d:\Temp\test\excel\test.txt" For Binary As #1 Put #1, , buf Close #1
End Sub
[/vba]
так вот можно [vba]
Код
Public Sub getFile() Dim buf As String Dim l As Long Open "d:\Temp\test\excel\test.txt" For Binary As #1 l = LOF(1) buf = String(l, Chr(0)) Get #1, , buf Close #1 buf = Left(buf, l \ 2) Debug.Print Len(buf)
Kill "d:\Temp\test\excel\test.txt" Open "d:\Temp\test\excel\test.txt" For Binary As #1 Put #1, , buf Close #1
вот если короткий файл - ещё можно, если придётся редактировать большой bin - то кусок файла придётся помещать в буфер обмена, громоздко как-то это всё будет выглядеть для элементарной операции... хотелось бы найти что-то поудобнее
вот если короткий файл - ещё можно, если придётся редактировать большой bin - то кусок файла придётся помещать в буфер обмена, громоздко как-то это всё будет выглядеть для элементарной операции... хотелось бы найти что-то поудобнееalex_11
У меня ещё такая проблема возникла, что при выполнении цикла [vba]
Код
Do while not eof(1) line input #1, var$ print #2, f(var$) loop
[/vba] транслятор может "не заметить" конца файла и продолжить выполнение цикла, в результате чего в файл с результатами в конец допишется всякая всячина, её потом нужно отделить от полезных данных.
Если not eof(1) заменить на loc(1)<lof(1) - тоже самое. Поэтому знак eof для excel - вещь нестрогая [moder]Коды нужно оформлять тегами! Поправила на первый раз[/moder]
У меня ещё такая проблема возникла, что при выполнении цикла [vba]
Код
Do while not eof(1) line input #1, var$ print #2, f(var$) loop
[/vba] транслятор может "не заметить" конца файла и продолжить выполнение цикла, в результате чего в файл с результатами в конец допишется всякая всячина, её потом нужно отделить от полезных данных.
Если not eof(1) заменить на loc(1)<lof(1) - тоже самое. Поэтому знак eof для excel - вещь нестрогая [moder]Коды нужно оформлять тегами! Поправила на первый раз[/moder]alex_11
Сообщение отредактировал Manyasha - Среда, 17.02.2016, 10:12
Ну не знаю, если Вам нужно считывать половину файла в бинарной модели через маленький буфер [vba]
Код
Public Sub getFile() Dim buf As String Dim l As Long Open "d:\Temp\test\excel\test.txt" For Binary As #1 Open "d:\Temp\test\excel\test2.txt" For Binary As #2
l = LOF(1) numByte = 5 ' размер в байтах buf = String(numByte, Chr(0)) ' i = 1 Do While numByte * i < l \ 2 Get #1, i, buf Put #2, , buf i = i + 1 Loop
Close #2 Close #1 'Kill "d:\Temp\test\excel\test.txt" 'Name "d:\Temp\test\excel\test2.txt" As "d:\Temp\test\excel\test.txt"
End Sub
[/vba]
Ну не знаю, если Вам нужно считывать половину файла в бинарной модели через маленький буфер [vba]
Код
Public Sub getFile() Dim buf As String Dim l As Long Open "d:\Temp\test\excel\test.txt" For Binary As #1 Open "d:\Temp\test\excel\test2.txt" For Binary As #2
l = LOF(1) numByte = 5 ' размер в байтах buf = String(numByte, Chr(0)) ' i = 1 Do While numByte * i < l \ 2 Get #1, i, buf Put #2, , buf i = i + 1 Loop
Close #2 Close #1 'Kill "d:\Temp\test\excel\test.txt" 'Name "d:\Temp\test\excel\test2.txt" As "d:\Temp\test\excel\test.txt"
а вот в моём примере неизвестно почему цикл может выполняться ещё 65536 раз впустую, потом программа продолжает работать без ошибки (если перед выходом поставить с=с+1, а после выхода - print #2, c) не каждый раз, а в зависимости от входных данных
долго он его гнать будет по кусочкам... :)
а вот в моём примере неизвестно почему цикл может выполняться ещё 65536 раз впустую, потом программа продолжает работать без ошибки (если перед выходом поставить с=с+1, а после выхода - print #2, c) не каждый раз, а в зависимости от входных данныхalex_11
ну сразу Вы не захотели, можно ведь буфер настроить на половину файла.
А с циклами есть подозрение, что бинарная модель не очень подходит для чтения построчно. Но Вы упорно изображаете Штирлица: файл в чужие руки? - лучше застрелиться!!!
ну сразу Вы не захотели, можно ведь буфер настроить на половину файла.
А с циклами есть подозрение, что бинарная модель не очень подходит для чтения построчно. Но Вы упорно изображаете Штирлица: файл в чужие руки? - лучше застрелиться!!!Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
исходный файл текстового формата, поэтому удобнее читать построчно, функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше данные опять читаются через line input
исходный файл текстового формата, поэтому удобнее читать построчно, функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше данные опять читаются через line inputalex_11