![]() |
|
Модераторы: Akina |
![]()
|
|
| DenageS |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 29.9.2006 Репутация: нет Всего: нет |
Здравствуйте.
Мне нужно сохранить в файл массив. Я это делал это в цикле сохранением каждого индекса массива в "ячейку" файла произвольно доступа. (Простите за терминологию). Тип данных - число. Вот как я это делал.
Сначала целью было - лиж бы работало, но теперь мне надо решить проблему - слишком большой объем файлов. Я попытался сохранять так же, изменив Random на Binary. При этом размер файла уменьшился примерно в 100 раз. Но открывать таким способом мне не удалось. А именно я стал экспериментировать
Но тогда при чтении
Неизменной оставалась лишь последняя запись. Тогда я методом щупа нашел, что если указать НЕ As Single, а As Byte, тогда все отлично работает, но присваиваться может лишь маленькое число, а например 1024 вызывает переполнение. В общем подскажите мне как сохранить массив с меньшим объемом файла, или же как обычное 4-х значное число перевести в As byte |
||||||
|
|||||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
1 байт - диапазон значений 0 - 0xFF (0 - 255) 2 байта - диапазон значений 0 - 0xFFFF (0 - 65535) То есть для числа 1024 тебе надо два байта (прочитать в данном случае то есть надо два байта из файла). Число получишь так: Старший байт * 256 (читай сдвиг влево на 8) + Младший байт. А еще посмотри тут http://vingrad.ru/VB-VB-001960 -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Так какого типа массив надо сохранять? именно Long?
Новый проект. 2 кнопки с именами Command1 и Command2. В модуль формы - вот такого типа код:
Развлекайся. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
В твоей схеме Put-Get сохраняют каждый раз один байт, поэтому чИсла длинее одного байта искажаются. Вероятно, за счет этого у тебя и уменьшился так сильно объем файла - потому что из многих байтов чисел записывались только по одному от каждого.
Потому что в операторе Open у тебя не указана "длина записи" - а по умолчанию она 1 байт. Нужно указать такую длину записи, сколько байт требует используемый тобою тип чисел. (Не знаю, как в VB, а в досовском бейсике еще надо было число сперва передавать в специальную "файловую" переменную, задаваемую в операторе Field, а уж из нее - в файл (при этом типе доступа).) Добавлено @ 11:01 это так же невозможно, как 4 цифры записать в трех клеточках. Количество цифр - оно и увеличивается при помощи добавления числу байтов. В одном байте (byte) помещается максимум 255. Это сообщение отредактировал(а) JusTalionis - 19.2.2007, 10:54 |
|||
|
||||
| daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
А можно ли в VB организовать упаковнный тип данных, как в паскале? прямо в файле?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
| Black_Star |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 9.9.2003 Где: Minsk Репутация: 4 Всего: 4 |
А мне кажется, что Random по умолчанию делает размер 50 байт. И вообще для сохранения массива не стоит делать цикл! Это изврат. Достаточно просто написать.
adr - адрес начала данных в файле. Единственный минус. При загрузке необходимо знать размер массива. Т.е. сразу надо сделать ReDim, а потом
Размер можно хранить в том же файле... Запись:
Чтение:
Что есть упакованный тип данных? |
||||||||||||
|
|||||||||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Это неверно. Вообще при указании типа доступа For Random обязательно следует указывать размер буфера (Len=). Если он не указан, то размер буфера устанавливается в 128 байт. Следует помнить, что первые 2 байта записи содержат длину содержащейся в данной записи информации. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Black_Star |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 9.9.2003 Где: Minsk Репутация: 4 Всего: 4 |
||||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Ни фига не "тем более". Размер буфера не имеет никакого отношения к размеру записи. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Black_Star |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 9.9.2003 Где: Minsk Репутация: 4 Всего: 4 |
|
||||
|
|||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |