Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118

Как сохранить данные массивов в файл?

11.04.2009, 16:27. Показов 5890. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех,

У меня в программе имеется несколько таблиц, заполняемых пользователем. Мне нужно добавить возможность сохранять всю эту информацию в файл.

Информация каждой таблицы хранится в виде нескольких массивов (на каждый столбец по массиву). В принципе, можно на основе этих массивов создать один массив R x C, полностью хранящий всю информацию о таблице. Вопрос в том, как лучше этот массив сохранить в файл.

Можно использовать Random Access, но проблема в том, что точно определить длину записи, необходимой для хранения массива, нельзя, потому что в ячейке может быть текст любой длины. Как быть?

Я не совсем знаю, как использовать Binary Access. То есть как именно организовать запись информации, хранящейся в нескольких массивах (по 1 массиву на таблицу) в двоичный файл? Повторяю, количество байт, необходимых для хранения массива, точно неизвестно.

Надеюсь на помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2009, 16:27
Ответы с готовыми решениями:

Как сохранить данные в файл
Здраствуйте! Есть несколько текстовых данных около 5, которые нужно объединить и сохранить в файле. Как это сделать программно?

Как сохранить данные в файл???
Народ, как сохранить данные из Edit1,Edit2,Edit3 в один файл...На разных строчках...???

Как сохранить данные в файл???
Как сохранить данные из Edit - ов в файл на одной строчке с пропуском??? Следующей строчке??? Помогите плиз! Срочно надо!

7
3 / 3 / 0
Регистрация: 16.01.2008
Сообщений: 359
13.04.2009, 05:30
я наверное уже достал всех этой фразой.... но..

ПИШИ В ОБЫЧНЫЙ ТЕКСТОВЫЙ ФАЙЛ С РАЗДЕЛИТЕЛЯМИ.

такой файл, кстати потом обратно в таблицу ложится без разговоров
и без предварительной загрузки в массив.
0
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
13.04.2009, 13:13  [ТС]
Спасибо за совет.

Нет, это не очень круто. Я хотел бы все-таки писать данные в двоичный файл. Для меня главное - узнать, как можно точно определить количество байт в конкретном массиве. То есть массив содержит, допустим, предложения, неизвестно какой длиные, и надо точно узнать, сколько надо места для его хранения.

Может, Вы знаете, как это сделать?
0
3 / 3 / 0
Регистрация: 16.01.2008
Сообщений: 359
13.04.2009, 14:48
т.е. ты хочешь сказать что тебе нужно знать сколько элементов массива имеют значения ?
т.е. определить количество элементов в массиве. Я недавно задавал тот же вопрос, меня правда не так поняли а я не стал объясняться.
Мне кажется у тебя 2 варианта:
1. инициализировать каждый свой массив например нулями, после того как в элемент массива будут помещены данные они затрут нули но не все,т.е.
если после инициализации элемент массива выглядит как:
000000000000000000000
то после записи в этот элемент он будет выгдядеть:
Сидоров00000000000000
в таком случая можнобудет определить длину элемента массива

2. пиши в файл тупо весь элемент массива,т.е. как определил массив стоко и пиши
0
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
14.04.2009, 14:42  [ТС]
Привет,

Нет, ты меня не понял. У меня массив строковых переменных. Допустим, в нем 10 элементов. Каждый элемент массива мы можем заполнить строковой переменной: либо одним словом, либо хоть целый роман записать. То есть длина каждого элемента массива неопределенна. Мне же надо создать функцию, которой бы я передавал такой массив, а она мне говорила: в настоящий момент, если весь массив записать в файл, понадобится 100 килобайт. Или только 100 байт.

Вот так.
0
CatsTail
18.04.2009, 21:34
Вот ориентировочный (но работоспособный) пример кода:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Attribute VB_Name = 'Sv'
 
Public myArray(1 To 300) As String
 
'::::: Вычисляет объем дискового пространства, необходимого для
'::::: сохранения массива на диске.
'::::: каждый элемент загружается с дескриптором длины
 
Public Function calcSpace(inpArr() As String) As Long
 
       '::: получаем граничные значения индексов
 
       n1& = LBound(inpArr, 1)
       n2& = UBound(inpArr, 1)
 
       '::: вычисляем
       
       sp& = 0
       
       For ii& = n1& To n2&
       
           sp& = sp& + Len(inpArr(ii&)) + 4
           
       Next ii&
 
       calcSpace = sp&
 
End Function
 
'::: Сохраняем массив
 
Public Sub saveArray(inpArr() As String, fname As String)
 
       fo% = FreeFile
       
       Open fname For Output As #fo% ' открываем на вывод - чистим старое содержимое
       
       Close fo%
       
       fo% = FreeFile
       
       Open fname For Binary Access Write As #fo%
       
       '::: получаем граничные значения индексов
 
       n1& = LBound(inpArr, 1)
       n2& = UBound(inpArr, 1)
       
       '::: собственно выгрузка
       
       For ii& = n1& To n2&
       
           LL& = Len(inpArr(ii&))
           
           Put #fo%, , LL&          '::: выгрузили дескриптор
 
           Put #fo%, , inpArr(ii&)  '::: выгрузили элемент
 
       Next ii&
       
       Close #fo%
 
End Sub
 
'::: Восстанавливаем массив
 
Public Sub restArray(inpArray() As String, fname As String)
 
       '::: получаем граничные значения индексов
 
       n1& = LBound(inpArray, 1)
       n2& = UBound(inpArray, 1)
 
       '::: Чистка
       
       For ii& = n1& To n2&
           inpArray(ii&) = ''
       Next ii&
       
       fi% = FreeFile
       
       Open fname For Binary Access Read As #fi%
       
       '::: восстановление
       
       For ii& = n1& To n2&
       
           Get #fi%, , LL&      ' читаем длину
           
           Buf$ = Space$(LL&)   ' выделяем буфер
           
           Get #fi%, , Buf$     ' читаем строку
           
           inpArray(ii&) = Buf$ 'кладем в массив
       
       Next ii&
       
       Close fi%
 
End Sub
Если интересно, могу прислать проект полнстью. Пиши на адрес:
Cats_Tail@mail.ru или abfaifel@online.ru

Борис
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
19.04.2009, 19:33  [ТС]
Привет и спасибо за ответ,

Да, было бы интересно посмотреть весь проект. Если не сложно, отправь по micha12@yandex.ru.

Я не совсем понимаю, почему ты записываешь каждый элемент массива отдельно, когда можно командой Put #1, , MyArray() записать целый массив, а потом командой Get #1, , MyArray() прочесть записанный массив (перед этим надо установить все его размерности).

Из того, что ты написал, я понял, что ты рассчитываешь количество места для хранения массива путем суммирования места для каждого элемента. В принципе, можно. Неужели нет одной команды, которая бы сделала всю эту работу?

Кстати, ты не знаешь, можно ли записать целый массив в массив типа Byte? Ведь в файл записывается именно содержание такого массива. А с помощью UBound(ByteArray) можно было бы рассчитать и требуемое место.

Другая идея заключается в том, чтобы запомнить размер файла до записи в него массива, затем сравнить с размером файла после записи массива, и на этой основе рассчитать размер массива. Какая функцию выдает размер файла, знаешь?

Надо решить эту проблему!
0
CatsTail
20.04.2009, 00:17
Функцция получения размера открытого файла - LOF(номер_файла); неоткрытого - FileLen(Имя_файла); Одной командой Put записать массив можно и считать можно. А при записи по строкам, можно (при некотором упорстве) читать строки выборочно.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2009, 00:17
Помогаю со студенческими работами здесь

Как сохранить данные в файл?
подскажите как в VBA код вставить данные, номер 00124124 Лицензия 1025151 (допустим) и после включения макроса считать данные с...

Как сохранить данные в файл с кириллицей?
import pickle name = f = open("name.dat", "wb") pickle.dump(name, f) f.close() получаем:

Как сохранить данные из dataset в файл?
Здравствуйте , подскажите пожалуйста как можно сохранить данные из DataGrid в файл ? (Извините там немного не правильно вопрос написал , а...

Как сохранить данные в CSV файл
Всем привет! Есть вот такой простенький парсер для авито. Как можно данные, которые распечатываются в циклах, записать в один CSV файл?...

Как данные из TextBox сохранить в файл
как данные из textbox сохранить в файл?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru