08. januar 2003 - 14:56Der er
7 kommentarer og 1 løsning
Hentning af data fra txt fil
Vil høre om det er muligt at få VB til at hente data fra en bestemt sted i en txt fil. Altså hvis man har en fil med mange oplysninger, så definere hvilke af disse oplysninger VB skal hente og benytte.
Derfor kan du læse linie for linie, og så kun hente det linienummer du ønsker, eller hente en linie der starter med eller indeholder nogle bestemte karakterer.
Alternativt kan du anvende typebestemte filer (Random Assecc file):
Åbne en typebestemt fil: Open Filnavn for RANDOM as filnummer Len=Recordlen)
Læse records til en variabel "Minvariabel" fra en typebestemt fil: Get #Filnummer, aktuelrecord, Minvariabel
Skrive records: Som at læse, skriv Put i stedet for Get
Private Sub Form_Load() Dim intFree As Integer Dim strData As String Const lStart As Long = 1 'start på filen Const lLength As Long = 4 'length fra start
intFree = FreeFile strData = Space$(lLength) Open "C:\autoexec.bat" For Binary Access Read As #intFree Get #intFree, lStart, strData Close #intFree
Her kommer lidt om typebestemte filer - det er faktisk MEGET simpelt:
Typebestemte filer
Generelt
Almindelige tekstfiler er sekventielle filer, dvs. filen kan kun læses sekventielt - altså fra første record, og derefter record for record.
Hvis man ønsker at læse en bestemt record i en sekventiel fil, må man læse filen igennem fra starten indtil man når den ønskede record. Selv om man måske ved, at det er record nr. 123 der skal bruges, er der ikke nogen genvej til direkte at få ad-gang til denne record, man er nødt til at læse de foranliggende 122 records.
I en typebestemt fil opbevares data som records af samme længde, dvs. alle records har samme opbygning og har fast længde. Records i en sådan fil er nummererede sekventielt startende med record nr. 1
Typebestemte filer kaldes også Random access files, dvs. filer med vilkårlig adgang - eller på almindeligt dansk: det er muligt at læse en bestemt record ved at angive recordens nr. uden at skulle læse alle de foranliggende records igennem.
Hver record i en typebestemt fil består af et eller flere felter, som hver har en fast længde, dvs. en records længde er summen af dens felters længde. De enkelte records og felter er ikke adskilt af skilletegn eller på anden måde, men adresseres kun ved deres position i recorden hhv. filen. Hvis man ved at recordlængden på en type-bestemt fil er 100 bytes, og man ønsker at læse record nr. 55, kan man regne sig frem til at denne record starter i position 5401 og slutter i position 5500.
Et eksempel
En fil indeholdende medarbejderoplysninger, f.eks. nr. og navn, dvs. 2 felter i hver record, kunne illustreres som nedenfor. Her er vist 3 records, svarende til 3 medar-bejdere:
Record 1 Record 1 Record 2 Record 2 Record 3 Record 3 Nr Navn Nr Navn Nr Navn
I Visual Basic er det muligt at definere egne datatyper. Det er der brug for, når der skal arbejdes med typebestemte filer, idet en datatype svarende til en record kan defineres. Datatypen til ovennævte eksempel kunne erklæres sådan:
Type medarbejderinfo nr AS string * 3 navn AS string * 40 End type
Erklæring af en brugerdefineret datatype kan KUN ske i et modul.
I den form eller procedure hvor recorden skal bruges, erklæres en variabel af den viste datatype således:
Dim medarbejder As medarbejderinfo
Denne variabel indeholder 2 elementer. Syntaksen når et element adresseres er
Til brug videre i eksemplet, erklæres yderligere nogle variabler:
Dim filnavn As string Dim filnr As integer Dim recordlen As integer Dim aktuelrecord As integer Dim sidsterecord As integer
En typebestemt fil åbnes sådan:
Open filnavn For Random As filnr Len = recordlen
Når der arbejdes med typebestemte filer, skal man specificere recordlængden. I ek-semplet kan den specificeres som recordlen = LEN(medarbejder), og variablen record-len indeholder så værdien 43.
Filens records læses sådan:
Get #filnr, aktuelrecord, medarbejder
dvs. der læses recordnr. aktuelrecord fra filnr og oplysningerne tildeles variablen medarbejder. Der skal altid holdes regnskab med hvilken record der p.t. er indlæst i programmet, så man kan skrive den rigtigt tilbage til filen efter evt. at have ændret i recorden.
Records skrives til filen sådan:
Put #filnr, aktuelrecord, medarbejder
I dette tilfælde overskrives den record i filnr som har positionen aktuelrecord.
For at kunne føje records til en typebestemt fil, skal man vide hvor mange records filen indeholder, og tilføje en ny record med recordnr = sidste recordnr + 1. Efter at have åbnet filen, kan man beregne antal records og opbevare værdien f.eks. i variablen sidsterecord således:
sidsterecord = Filelen(filnavn) / recordlen,
og tilføjelse af en record kan f.eks. ske således:
sidsterecord = sidsterecord + 1 Put #filnr, sidsterecord, medarbejder
Takker for svaret martin_moth. Der er noget jeg skal til at lege mid.
Angående det med point, så synes jeg personligt ikke at det vigtigste er hvor mange point man får for et svar, men det at man har været i stand til at hjælpe en anden. Det er i hvert fald derfor jeg hjælper andre på forums.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.