Как сохранить данные массивов в файл? - VB
Формулировка задачи:
Приветствую всех,
У меня в программе имеется несколько таблиц, заполняемых пользователем. Мне нужно добавить возможность сохранять всю эту информацию в файл.
Информация каждой таблицы хранится в виде нескольких массивов (на каждый столбец по массиву). В принципе, можно на основе этих массивов создать один массив R x C, полностью хранящий всю информацию о таблице. Вопрос в том, как лучше этот массив сохранить в файл.
Можно использовать Random Access, но проблема в том, что точно определить длину записи, необходимой для хранения массива, нельзя, потому что в ячейке может быть текст любой длины. Как быть?
Я не совсем знаю, как использовать Binary Access. То есть как именно организовать запись информации, хранящейся в нескольких массивах (по 1 массиву на таблицу) в двоичный файл? Повторяю, количество байт, необходимых для хранения массива, точно неизвестно.
Надеюсь на помощь.
Решение задачи: «Как сохранить данные массивов в файл?»
textual
Листинг программы
- 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д