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ů ...
|