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

Узнай цену своей работы

Формулировка задачи:

Приветствую всех, У меня в программе имеется несколько таблиц, заполняемых пользователем. Мне нужно добавить возможность сохранять всю эту информацию в файл. Информация каждой таблицы хранится в виде нескольких массивов (на каждый столбец по массиву). В принципе, можно на основе этих массивов создать один массив R x C, полностью хранящий всю информацию о таблице. Вопрос в том, как лучше этот массив сохранить в файл. Можно использовать Random Access, но проблема в том, что точно определить длину записи, необходимой для хранения массива, нельзя, потому что в ячейке может быть текст любой длины. Как быть? Я не совсем знаю, как использовать Binary Access. То есть как именно организовать запись информации, хранящейся в нескольких массивах (по 1 массиву на таблицу) в двоичный файл? Повторяю, количество байт, необходимых для хранения массива, точно неизвестно. Надеюсь на помощь.

Решение задачи: «Как сохранить данные массивов в файл?»

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

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


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

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

11   голосов , оценка 3.636 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы