Как сохранить данные массивов в файл? - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д