I den forrige lektion så vi hvordan man med
FileSystemObject kan du få adgang til serverens filsystem. I denne lektion vil vi bruge denne adgang til at læse fra en ganske almindelig tekstfil.
Tekstfiler kan være yderst nyttige til at lagre data af forskellig art. De er ikke helt så fleksible som egentlige databaser - til gengæld kan det være mindre ressourcekrævende at benytte en tekstfil. Hertil kommer den store fordel ved at benytte et enkelt og simpelt format, som fungerer på de fleste systemer.
Udfra Filesystem objektet laver vi et objekt for den egentlige fil. Til dette formål benyttes
OpenTextFile metoden. Syntaksen er (lidt forsimplet) som følger:
object.OpenTextFile(filnavn, mode)
Eksempler i lektion baseres på filen ministerier.txt som eksempel. Der er tale om en simpel liste med de danske ministerier og deres domæner. Du kan enten downloade filen, eller du kan lave din egen fil, og prøve eksemplerne med den.
Lad os først prøve at åbne ministerier.txt :
<% ' Variabler Dim fso, f, filespec ' Filesystem objektet Set fso = CreateObject("Scripting.FileSystemObject") ' Find den fysiske placering af tekstfilen filespec = Server.Mappath("/tutorials/asp/ministerier.txt") ' Åbn tekstfilen Set f = fso.OpenTextFile(filespec,1) ' Luk tekstfilen igen f.Close %>
Med metoden
ReadLine kan man læse en linie fra tekstfilen. Metoden læser frem til (men medtager ikke) det første linieskift.
<html> <head> <title>Læse fra tekstfiler</title> </head> <body> <% Dim fso, f, filespec Set fso = CreateObject("Scripting.FileSystemObject") filespec = Server.Mappath("/tutorials/asp/ministerier.txt") Set f = fso.OpenTextFile(filespec,1) ' Læs linie fra tekstfilen, og skriv indholdet til klienten Response.write f.ReadLine f.Close %> </body> </html>
Med metoden
ReadLine kan man læse en linie fra tekstfilen. Metoden læser frem til (men medtager ikke) det første linieskift.
<html> <head> <title>Læse fra tekstfiler</title> </head> <body> <% Dim fso, f, filespec Set fso = CreateObject("Scripting.FileSystemObject") filespec = Server.Mappath("/tutorials/asp/ministerier.txt") Set f = fso.OpenTextFile(filespec,1) ' Læs linie for linie indtil slutningen af filen Do While not f.AtEndOfStream Response.write f.ReadLine & "<br>" Loop f.Close %> </body> </html>
I dette tilfælde valgte vi at gennemløbe alle linierne - men vi kunne også have opnået den samme effekt med metoden
ReadAll. Hvis du arbejder med meget store tekstfiler, skal du være opmærksom på at ReadAll metoden bruger flere ressourcer end ReadLine. For mindre filer har det dog ikke den store betydning.
Man behøver ikke læse alle linier i en fil. Med metoden
SkipLine kan man springe linier over.
Dette kan vises med følgende eksempel, hvor de første 5 linier i filen springes over - herefter læses den 6. linie:
<html> <head> <title>Læse fra tekstfiler</title> </head> <body> <% Dim fso, f, filespec Set fso = CreateObject("Scripting.FileSystemObject") filespec = Server.Mappath("/tutorials/asp/ministerier.txt") Set f = fso.OpenTextFile(filespec,1) ' Spring de fem første linier over For intLine = 1 to 5 f.SkipLine Next ' udskriv den sjette linie Response.write f.ReadLine & "<br>" f.Close %> </body> </html>
Som nævnt i starten af lektionen kan tekstfiler være en ganske udemærket datalager. Det er præcis hvad vi vil illustruere ved at lave en simpel linksamling på grundlag af indholdet i tekstfilen ministerier.txt.
Filen er jo ganske systematisk bygget op med navnet på ministeriet - derefter et komma - og ministeriets domænenavn. Man kunne endda sagtens forestille sig, hvordan der kunne have været flere kommaseparerede oplysninger i filen.
For at få fat på oplysningerne i hver linie kan vi benytte et array. Hvis du først vil læse mere om arrays, henvises til lektion 8.
<html> <head> <title>Læse fra tekstfiler</title> </head> <body> <% Dim fso, f, filespec Set fso = CreateObject("Scripting.FileSystemObject") filespec = Server.Mappath("/tutorials/asp/ministerier.txt") Set f = fso.OpenTextFile(filespec,1) ' Læs linie for linie indtil slutningen af filen Do While not f.AtEndOfStream ' Lav array ved at splitte ved kommaer arrM = Split(f.ReadLine,",") ' Skriv links - hent oplysningerne i array Response.write "<li><a href='http://" & arrM(1) & "'>" & arrM(0) & "</a></li>" Loop f.Close %> </body> </html>
Ganske smart ikke? I princippet kunne du nu bare udvide tekstfilen med flere hundrede links - eller måske udbygge systemet til også at indeholde adresseoplysninger.
I den næste lektion vil vi kigge nærmere på hvordan man tilføjer linier til en tekstfil.