Nyeste it-job

Lektion 15: Læse fra en tekstfil

I den forrige lektion så vi hvordan man med dokumentationFileSystemObject 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.

Åbn tekstfilen

Udfra Filesystem objektet laver vi et objekt for den egentlige fil. Til dette formål benyttes dokumentationOpenTextFile metoden. Syntaksen er (lidt forsimplet) som følger:

object.OpenTextFile(filnavn, mode)
filnavn
Filnavnet identificerer hvilken fil, der skal åbnes.
mode
mode kan sætte til 1 (ForReading), 2 (ForWriting), eller 8 (ForAppending). I denne lektion vil vi kun læse fra en fil, så den oplagte mode er dermed ForReading. Først i den næste lektion vil vi skrive til filen.

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
%>

Eksempel 1: Læs en linie fra tekstfilen

Med metoden dokumentationReadLine 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>

Eksempel 2: Læs alle linier fra tekstfilen

Med metoden dokumentationReadLine 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 dokumentationReadAll. 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.

Eksempel 3: Spring linier over

Man behøver ikke læse alle linier i en fil. Med metoden dokumentationSkipLine 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>

Eksempel 4: En simpel linksamling

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.


Nyhedsbrev
Tilmeld dig HTML.dk's nyhedsbrev


Er du jobsøgende?

 Ja
 Nej
Se det foreløbige resultat når du har stemt!


Se tidligere afstemninger

 Community
Brugernavn

Adgangskode

Husk

 *  Bliv medlem her
 *  Glemt password?


Om HTML.dk | Oplysninger om ophavsret | Politik om persondata | Annoncer på HTML.dk | RSS

Valid XHTML 1.1! Valid CSS! Powered by Scannet