Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как уменьшить размер файла, открытого в binary mode? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как уменьшить размер файла, открытого в binary mode? (Макросы/Sub)
Как уменьшить размер файла, открытого в binary mode?
alex_11 Дата: Вторник, 16.02.2016, 20:03 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Нужно установить "конец файла" после чтения методом get в середине, всё что находится справа нужно стереть. Функция eof данный вопрос не решает.
 
Ответить
СообщениеНужно установить "конец файла" после чтения методом get в середине, всё что находится справа нужно стереть. Функция eof данный вопрос не решает.

Автор - alex_11
Дата добавления - 16.02.2016 в 20:03
Udik Дата: Вторник, 16.02.2016, 20:09 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
может файл и код донесёте сюда? B)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениеможет файл и код донесёте сюда? B)

Автор - Udik
Дата добавления - 16.02.2016 в 20:09
RAN Дата: Вторник, 16.02.2016, 20:16 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4297
Репутация: 839 ±
Замечаний: 0% ±

2010
Функция eof данный вопрос не решает

Есть серьезное подзрение, что функция VAL тоже.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Функция eof данный вопрос не решает

Есть серьезное подзрение, что функция VAL тоже.

Автор - RAN
Дата добавления - 16.02.2016 в 20:16
alex_11 Дата: Вторник, 16.02.2016, 20:26 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Если выполнить Put #1, ,Chr$(26), файл всё равно останется длинным, Lof будет возвращать его старый размер после закрытия/отырытия.


Сообщение отредактировал alex_11 - Вторник, 16.02.2016, 20:38
 
Ответить
СообщениеЕсли выполнить Put #1, ,Chr$(26), файл всё равно останется длинным, Lof будет возвращать его старый размер после закрытия/отырытия.

Автор - alex_11
Дата добавления - 16.02.2016 в 20:26
Апострофф Дата: Вторник, 16.02.2016, 20:58 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 28 ±
Замечаний: 0% ±

Excel 2003
alex_11, прочитайте нужный кусок файла и перезапишите его, не вижу никаких проблем.
 
Ответить
Сообщениеalex_11, прочитайте нужный кусок файла и перезапишите его, не вижу никаких проблем.

Автор - Апострофф
Дата добавления - 16.02.2016 в 20:58
Udik Дата: Вторник, 16.02.2016, 21:25 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
так вот можно
[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

End Sub

[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениетак вот можно
[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

End Sub

[/vba]

Автор - Udik
Дата добавления - 16.02.2016 в 21:25
alex_11 Дата: Вторник, 16.02.2016, 21:57 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
вот если короткий файл - ещё можно, если придётся редактировать большой bin - то кусок файла придётся помещать в буфер обмена, громоздко как-то это всё будет выглядеть для элементарной операции... хотелось бы найти что-то поудобнее
 
Ответить
Сообщениевот если короткий файл - ещё можно, если придётся редактировать большой bin - то кусок файла придётся помещать в буфер обмена, громоздко как-то это всё будет выглядеть для элементарной операции... хотелось бы найти что-то поудобнее

Автор - alex_11
Дата добавления - 16.02.2016 в 21:57
Udik Дата: Вторник, 16.02.2016, 22:01 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Ну можно открыть второй файл и считать туда, потом его переименовать. А чтобы "обрезать" первоначальный даже не знаю.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНу можно открыть второй файл и считать туда, потом его переименовать. А чтобы "обрезать" первоначальный даже не знаю.

Автор - Udik
Дата добавления - 16.02.2016 в 22:01
alex_11 Дата: Вторник, 16.02.2016, 22:13 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
У меня ещё такая проблема возникла, что при выполнении цикла
[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]


Сообщение отредактировал Manyasha - Среда, 17.02.2016, 10:12
 
Ответить
СообщениеУ меня ещё такая проблема возникла, что при выполнении цикла
[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
Дата добавления - 16.02.2016 в 22:13
Udik Дата: Среда, 17.02.2016, 15:35 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Ну не знаю, если Вам нужно считывать половину файла в бинарной модели через маленький буфер
[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]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНу не знаю, если Вам нужно считывать половину файла в бинарной модели через маленький буфер
[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]

Автор - Udik
Дата добавления - 17.02.2016 в 15:35
alex_11 Дата: Среда, 17.02.2016, 19:27 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
долго он его гнать будет по кусочкам... :)

а вот в моём примере неизвестно почему цикл может выполняться ещё 65536 раз впустую, потом программа продолжает работать без ошибки
(если перед выходом поставить с=с+1, а после выхода - print #2, c)
не каждый раз, а в зависимости от входных данных
 
Ответить
Сообщениедолго он его гнать будет по кусочкам... :)

а вот в моём примере неизвестно почему цикл может выполняться ещё 65536 раз впустую, потом программа продолжает работать без ошибки
(если перед выходом поставить с=с+1, а после выхода - print #2, c)
не каждый раз, а в зависимости от входных данных

Автор - alex_11
Дата добавления - 17.02.2016 в 19:27
Udik Дата: Среда, 17.02.2016, 19:35 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
долго он его гнать будет по кусочкам... :)

ну сразу Вы не захотели, можно ведь буфер настроить на половину файла. B)

А с циклами есть подозрение, что бинарная модель не очень подходит для чтения построчно. Но Вы упорно изображаете Штирлица: файл в чужие руки? - лучше застрелиться!!!


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
долго он его гнать будет по кусочкам... :)

ну сразу Вы не захотели, можно ведь буфер настроить на половину файла. B)

А с циклами есть подозрение, что бинарная модель не очень подходит для чтения построчно. Но Вы упорно изображаете Штирлица: файл в чужие руки? - лучше застрелиться!!!

Автор - Udik
Дата добавления - 17.02.2016 в 19:35
alex_11 Дата: Четверг, 18.02.2016, 17:51 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
исходный файл текстового формата, поэтому удобнее читать построчно, функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше данные опять читаются через line input
 
Ответить
Сообщениеисходный файл текстового формата, поэтому удобнее читать построчно, функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше данные опять читаются через line input

Автор - alex_11
Дата добавления - 18.02.2016 в 17:51
alex_11 Дата: Четверг, 18.02.2016, 18:03 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
причём ошибки в формате исходного файла нет - данные должны читаться правильно (оба входных файла одного вида)
 
Ответить
Сообщениепричём ошибки в формате исходного файла нет - данные должны читаться правильно (оба входных файла одного вида)

Автор - alex_11
Дата добавления - 18.02.2016 в 18:03
Udik Дата: Четверг, 18.02.2016, 18:29 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1297
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше

Не-а, я гадать не буду как у вас там всё устроено. :p


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
функция в цикле может обращаться к нему через Get и Put и таким образом менять положение курсора, дальше

Не-а, я гадать не буду как у вас там всё устроено. :p

Автор - Udik
Дата добавления - 18.02.2016 в 18:29
alex_11 Дата: Пятница, 19.02.2016, 11:32 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
листинг просто длинный, чтобы его весь здесь рассматривать. Я ещё сам посмотрю, в чём там дело, потом напишу
 
Ответить
Сообщениелистинг просто длинный, чтобы его весь здесь рассматривать. Я ещё сам посмотрю, в чём там дело, потом напишу

Автор - alex_11
Дата добавления - 19.02.2016 в 11:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как уменьшить размер файла, открытого в binary mode? (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!