|
||||
Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.Klikk her for å gå til den oppdaterte informasjonen. Binær filtilgang (binary access)Ved hjelp av binær tilgang er det mulig å lagre informasjon på akkurat den måten du selv ønsker, du er ikke avhengig av å benytte en fast postlengde på den informasjonen du lagrer. Dette betyr igjen at du må vite hvordan informasjonen er lagret for å kunne lese innholdet i en binær fil på en fornuftig måte. Filer laget for binær tilgang benytter minst lagringsplass siden man kan benytte poster av forskjellig størrelse. Man kan også lese og skrive informasjon samtidigi slik man kan med tilfeldig tilgang. Postene i en binær fil kan være av en variable størrelse. Dette kan man oppnå ved å benytte en brukerdefinert datatype. Brukerdefinerte datatyper defineres i modulens deklarasjonsdel (på toppen av modulen) på denne måten: Type MyBinaryRecordInfo ID As String ' variabel lengde LastName As String ' variabel lengde FirstName As String ' variabel lengde BirthDate As Date ' fast lengde End Type For å
åpne en fil for binær tilgang fra VBA benyttes følgende syntaks: Sub WriteBinaryFile() Dim MyRecord As MyBinaryRecordInfo, f As Integer, i As Integer If Len(Dir("C:\FOLDERNAME\BINFILE.DAT")) > 0 Then ' sletter filen dersom den finnes Kill "C:\FOLDERNAME\BINFILE.DAT" End If f = FreeFile ' neste ledige filnummer ' oppretter den nye filen Open "C:\FOLDERNAME\BINFILE.DAT" For Binary As #f ' skriver innhold til den binære filen For i = 1 To 100 With MyRecord .ID = RandomLengthString(10, 3) ' bare en dummy .LastName = "LastName" & i .FirstName = "FirstName" & i .BirthDate = Date - i End With WriteBinaryRecord MyRecord, f ' lagrer informasjonen Next i Close #f ' lukker filen End Sub Sub WriteBinaryRecord(MyRecord As MyBinaryRecordInfo, f As Integer) ' skriver innholdet i MyRecord til en åpnet binær fil Dim intSize As Integer With MyRecord intSize = Len(.ID) ' bestemmer lengden av innholdet i variabelen Put f, , intSize ' lagrer lengden av variabelen Put f, , .ID ' lagrer innholdet i variabelen intSize = Len(.LastName) ' bestemmer lengden av innholdet i variabelen Put f, , intSize ' lagrer lengden av variabelen Put f, , .LastName ' lagrer innholdet i variabelen intSize = Len(.FirstName) ' bestemmer lengden av innholdet i variabelen Put f, , intSize ' lagrer lengden av variabelen Put f, , .FirstName ' lagrer innholdet i variabelen Put f, , .BirthDate ' lagrer innholdet i variabelen (fast lengde variabel) End With End Sub Private Function RandomLengthString(Optional lngMax As Long = 100, Optional lngMin As Long = 1) As String Dim i As Long, j As Long, c As Integer, strResult As String ' returnerer en tilfeldig tekst med tilfeldig lengde, har ingen praktisk betydning utenom dette eksempelet Randomize j = Int(Rnd * (lngMax - lngMin + 1) + lngMin) strResult = vbNullString For i = 1 To j c = Int(Rnd * (122 - 97 + 1) + 97) strResult = strResult & Chr(c) Next i RandomLengthString = strResult End Function Fra eksempelmakroen ovenfor kan man se at en binær fil trenger mer kode for å håndtere lesing og skriving enn det som kreves for en fil åpnet for tilfeldig tilgang som kan lese og skrive hele poster ved hjelp av ett enkelt funksjonkall. For å lese informasjon fra en binær fil benytter man Get. Når man leser informasjon med Get sammen med en variabel av variabel lengde, vil antall bytes som leses fra filen være likt med lengden på den variabelen som benyttes sammen med Get. For å midlertidig angi en lengde til en variabel benyttes String$ funksjonen. String$ funksjonen kan angi lengden til en variabel til et bestemt antall mellomromstegn (eller et annet tegn). Makroen nedenfor viser hvordan man kan lese informasjon fra en binær fil: Sub ReadBinaryFile() Dim MyRecord As MyBinaryRecordInfo, f As Integer, i As Long f = FreeFile ' neste ledige filnummer ' åpner den binære filen Open "C:\FOLDERNAME\BINFILE.DAT" For Binary As #f ' leser informasjon fra den binære filen i = 0 Do While Loc(f) < LOF(f) i = i + 1 ReadBinaryRecord MyRecord, f ' gjør et eller annet med informasjonen With MyRecord Debug.Print "Record #" & i, .ID, .LastName, .FirstName, .BirthDate End With Loop Close #f ' lukker filen End Sub Sub ReadBinaryRecord(MyRecord As MyBinaryRecordInfo, f As Integer) ' leser neste record fra en binær fil Dim intSize As Integer With MyRecord Get f, , intSize ' les lengden på variabelen .ID = String(intSize, " ") ' sett lengden på variabelen Get f, , .ID ' les informasjon til variabelen Get f, , intSize ' les lengden på variabelen .LastName = String(intSize, " ") ' sett lengden på variabelen Get f, , .LastName ' les informasjon til variabelen Get f, , intSize ' les lengden på variabelen .FirstName = String(intSize, " ") ' sett lengden på variabelen Get f, , .FirstName ' les informasjon til variabelen Get f, , .BirthDate ' les informasjon til variabelen (fast lengde variabel) End With End Sub
Dokumentet er sist oppdatert 1999-12-17 12:33:11
|
||||
|