Binární soubory - praktické použití

Pokud tedy máme za sebou základy použití binárních souborů, můžeme zkusit něco využitelnějšího. Jednou z dobrých věcí binárních souborů je to, že můžeme ukládat nejenom řetězce a čísla, ale i pole, uživatelské typy (UDT) a pod. Je to velice užitečné, pokud potřebujeme uložit pole UDT, které například obsahují kolekci položek - název, klíčové slovo, ID autora a URL adresu:

Private Type Resources
    Name As String
    Keywords As String
    AuthorID As Long
    URL As String
End Type

a jsou polem o několika položkách...

Private cResources() As Resources

Použitím binárních souborů je jednoduché ukládat a číst tyto pole ze souboru. Zároveň s tím můžeme uložit kategorii, do které položka patří a unikátní identifikátor aplikace - slouží pro rozpoznávání verzí, ve které byla data uložena:

Private sCategory As String
Private sAppIdent As String * 5
Private nAppVersion As Integer

Nyní se můžeme podívat na kód pro ukládání. Nejprve na události Form_Load nastavíme informace pro sCategory a sAppIdent a vytvoříme proceduru FillData s pomocnými položkami:

Private Sub Form_Load()

    sAppIdent = "DVPAD"
    nAppVersion = App.Major

End Sub

Private Sub FillData()

    ReDim cResources (1 To 2)
    With cResources(1)
         .Name = "Příklad 1"
         .Keywords = "winsock, ftp"
         .AuthorID = 1
         .URL = "http://www.tabor.cz/bozena"
    End With
    With cResources(2)
         .Name = "Příklad 2"
         .Keywords = "webbrowser, ie "
         .AuthorID = 3
         .URL = "http://www.tabor.cz"
    End With
    
    sCategory = "Internet"

End Sub

Dále vytvoříme proceduru, která zapíše data na disk:

Private Sub SaveData()

   Dim nFileNum As Integer
   Dim nLen As Integer, i As Long, lCount As Long

   On Error Resume Next
   'pokud soubor existuje, tak do smáznem
   Kill App.Path & "\example.bin"
   On Error Goto 0
   nFileNum = FreeFile
   Open App.Path & "\example.bin" For Binary Access _
   
   Write Lock Read Write As #nFileNum
   'naše ID aplikace
   Put #nFileNum, , sAppIdent
   'verze
   Put #nFileNum, , nAppVersion
   'Zjištění délky kategorie
   nLen = Len(sCategory)
   'a zápis
   Put #nFileNum, , nLen
   Put #nFileNum, , sCategory
   'uložení počtu položek v poli
   lCount = UBound(cResources)
   Put #nFileNum, , lCount
   'uložení pole
   For i = 1 To lCount
       Put #nFileNum, , cResources(i)
   Next i
   Close #nFileNum

End Sub

a kód pro čtení dat ...

Private Sub ReadData()

   Dim nFileNum As Integer, lCount As Long
   Dim sFileAppIdent As String * 5, nFileAppVersion As Integer
   Dim nLen As Integer, i As Long

   nFileNum = FreeFile
   Open App.Path & "\example.bin" For Binary Access _
      Read Lock Read Write As #nFileNum
   'Přečteme ID aplikace
   'inicializace proměnné, protože je deklarována jako String * 5
   Get #nFileNum, , sFileAppIdent
   'ověříme, a pokud nesedí, tak čteme jiný soubor
   If sFileAppIdent = sAppIdent Then
       'Otestujeme verzi
       Get #nFileNum, , nFileAppVersion
       If nFileAppVersion < nAppVersion Then
           'Zde může být převodní funkce na nový formát ...
       ElseIf nFileAppVersion > nAppVersion Then
           'Vytvořeno novější verzí, můžeme mít problémy se čtením
       End If
       'zjištění délky kategorie
       Get #nFileNum, , nLen
       sCategory = Space$(nLen)
       'načtení kategorie
       Get #nFileNum, , sCategory
       'Zjištění počtu položek v poli
       Get #nFileNum, , lCount
       If lCount > 0 Then
           'předimenzování pole
           ReDim cResources(1 To lCount)
           'načtení položek do pole
           For i = 1 To lCount
               Get #nFileNum, , cResources(i)
           Next i
       End If
   Else
       Msgbox "Chybný soubor"
   End If
   Close #nFileNum
   'Stopnem to a můžeme se podívat do Locals Window na to, co se načetlo
   Stop

End Sub

Nyní přidejte na formulář tři tlačítka a každému dejte volání jedné procedury. Spusťte projekt, nejprve použijte tlačítko s voláním funkce FillData - ta vyplní položky testovacími hodnotami. Jako další použijte tlačítko s voláním funkce SaveData, která zapíše tyto hodnoty do souboru. A nakonec použijte třetí tlačítko s metodou LoadData. Až se program dostane do ladícího módu, klikněte na menu View a položku Locals, rozbalte objekt Me a poté cResources - uvidíte načtené položky.

Nyní již víte vše pro vytváření svých vlastních formátů ...

Zpět

Autor: The Bozena