Как сохранить данные массивов в файл? - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы