ERLANDSEN DATA CONSULTING Excel & VBA Tips   Information in English / Informasjon på engelsk

Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.

Klikk her for å gå til den oppdaterte informasjonen.

Sekvensiell filtilgang

Sekvensiell tilgang (Input, Output, and Append) benyttes til å lese fra og skrive til tekstfiler, som for eksempel log-filer og rapporter (*.txt filer, *.ini filer og *.csv filer). Det er enkelt å lage og redigere filer for sekvensiell tilgang med vanlige tekstredigeringsprogrammer, som for eksempel Notisblokk. Disse filene kan siden lett leses eller redigeres ved hjelp av VBA. Filer for sekvensiell tilgang er ikke egnet til å lagre store mengder data siden de krever større lagringsplass enn de andre filtypene. Man kan heller ikke lese og skrive til en sekvensiell fil samtidig, man må lukke filen dersom man ønsker å bytte mellom lesing og skriving.

Åpne filer for sekvensiell tilgang
Filer kan åpnes for sekvensiell tilgang på tre måter:

  • Input, benyttes til å lese tegn fra filen, filen må finnes fra før.
  • Output, benyttes til å skrive tegn til filen, filen vil bli opprettet dersom den ikke finnes fra før.
  • Append; benyttes til å skrive tegn som legges til på slutten av filen, filen vil bli opprettet dersom den ikke finnes fra før.

For å åpne en fil for sekvensiell tilgang fra VBA benytter man denne syntaksen:
Open filename For [Input, Output, Append] As filenumber
Du må lukke alle filer som åpnes før du åpner filen på nytt med en annen tilgangstype.

Skrive til filer som er åpnet for sekvensiell tilgang

For å lagre informasjon i en fil åpnet for sekvensiell tilgang benytter man funksjonene Print # eller Write # for å skrive data til filen.

Print # skriver formaterte data (data med fast lengde) til en sekvensiell fil og benytter følgende syntaks:  Print # filenumber,[outputlist]
Her er et eksempel:

Sub PrintToTextFile()
Dim FileNum As Integer, i As Long
    If Dir("C:\FOLDERNAME\TEXTFILE.TXT") <> "" Then
        ' sletter filen dersom den finnes fra før
        Kill "C:\FOLDERNAME\TEXTFILE.TXT"
    End If
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\TEXTFILE.TXT" For Output As #FileNum 
    ' oppretter en ny fil
    'Open "C:\FOLDERNAME\TEXTFILE.TXT" For Append As #FileNum 
    ' legger til data på slutten av en eksisterende fil
    ' skriv til tekstfilen
    For i = 1 To 100
        Print #FileNum, "Dette er linje nummer " & i & " " & Date & " " & i
        If i Mod 10 = 0 Then Print #FileNum, 
        ' legger til en blank linje for hver 10. linje
    Next i
    Close #FileNum ' lukker filen
End Sub
Både Output og Append vil opprette en ny fil dersom filen ikke eksisterer fra før. Append vil legge de nye dataene til på slutten av den eksisterende filen

Write # skriver komma-separerte data til tekstfilen og benytter denne syntaksen: Write#filenumber[,outputlist]

Når man skriver data til en fil med Write #, vil tekstfelt omgis av anførselstegn ("), datofelt vil omgis av #. På grunn av dette benyttes Write # til å lagre data som skal leses med Input #. Her er et eksempel:

Sub WriteToTextFile()
Dim FileNum As Integer, i As Long
    If Dir("C:\FOLDERNAME\TEXTFILE.TXT") <> "" Then
        ' sletter filen dersom den finnes fra før
        Kill "C:\FOLDERNAME\TEXTFILE.TXT"
    End If
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\TEXTFILE.TXT" For Output As #FileNum 
    ' oppretter en ny fil
    'Open "C:\FOLDERNAME\TEXTFILE.TXT" For Append As #FileNum 
    ' legger til data på slutten av en eksisterende fil
    ' skriv til tekstfilen
    For i = 1 To 100
        Write #FileNum, "Dette er linje nummer " & i, Date, i
    Next i
    Close #FileNum ' lukker filen
End Sub

Se eventuelt Hjelp for nærmere informasjon om Print og Write.

Lese fra filer som er åpnet for sekvensiell tilgang

For å lese informasjon fra en tekstfil må man først åpne filen for Input, deretter benytter man Line Input # eller Input # for å lese innholdet i filen. Line Input # benyttes når man ønsker å lese innholdet i filen en linje om gangen. I en tekstfil med komma-separerte data kan man benytte Input # for å lese innholdet fra hver linje inn i en liste med variabler.

Les informasjon fra en tekstfil
Dette eksempelet viser hvordan man kan lese innholdet i en tekstfil linje for linje:

Sub ReadLineFromPrintedTextFile()
Dim InputString As String, FileNum As Integer
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\TEXTFILE.TXT" For Input As #FileNum
    While Not EOF(FileNum)
        Line Input #FileNum, InputString ' les en linje fra tekstfilen
        Debug.Print InputString ' gjør noe med informasjonen
    Wend
    Close #FileNum
End Sub

Les informasjon fra en tekstfil med komma-separet informasjon
Den neste linjen viser et eksempel på hvordan informasjon er lagret i en fil med komma-separert informasjon:

"Nordmann", "Ola", 30, "Kongens gate 11", "Oslo"
Denne eksempelmakroen viser hvordan man kan lese informasjon fra en fil med komma-separerte data:
Sub ReadLineFromWrittenTextFile()
Dim InputString As String, FileNum As Integer
Dim TextLine As String, MyDate As Date, IntegerValue As Integer
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\TEXTFILE.TXT" For Input As #FileNum
    While Not EOF(FileNum)
        Input #FileNum, InputString, MyDate, IntegerValue
        Debug.Print InputString, MyDate, IntegerValue
        ' gjør noe med informasjonen
    Wend
    Close FileNum
End Sub

 

Dokumentet er sist oppdatert 1999-12-17 12:33:11      Utskriftsvennlig versjon

 

Erlandsen Data Consulting     http://www.erlandsendata.no/   
Excel & VBA Tips   Copyright ©1999-2017    Ole P. Erlandsen   All rights reserved
E-post kontaktadresse