Avatar billede --hcf--baz_zerg Nybegynder
08. januar 2003 - 14:56 Der 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.
Avatar billede martin_moth Mester
08. januar 2003 - 15:13 #1
I VB læses ASCII-filer linie for linie.

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
Avatar billede martin_moth Mester
08. januar 2003 - 15:14 #2
PS: Random Assecc file = Random Access file
Avatar billede martin_moth Mester
08. januar 2003 - 15:18 #3
Mere om Rancom Access File (i modsætning til sekventielle filer):

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconusingrandomfileaccess.asp

Skal du have hjælp til at kode et loop, der søger efter en bestemt linie i en alm. text-fil? Eller har du fået svar nok?
/Martin
Avatar billede sjh Nybegynder
08. januar 2003 - 15:19 #4
ellers prøv sådan:

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
 
  Text1.Text = strData
End Sub
Avatar billede --hcf--baz_zerg Nybegynder
14. januar 2003 - 11:56 #5
Vil lige starte med at undskylde at jeg ikke har været her inde i længe tid, men har ikke haft tid.

--> martin_moth
Det du skriver lyder spændende, men har ikke lige forstået det 100%. Er det ikke muligt at fange dig på endten MSN eller ICQ???
Avatar billede martin_moth Mester
14. januar 2003 - 12:12 #6
Nej, du kan ikke fange mig på ICQ eller MSN.

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

  variabelnavn.elementnavn

f.eks. således:

  medarbejder.nr = “123”
  medarbejder.navn = “Hans Jensen”

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

En typebestemt fil lukkes sådan:

  Close filnr

/Martin - så meget tekst for sølle 30 points...
Avatar billede --hcf--baz_zerg Nybegynder
14. januar 2003 - 15:22 #7
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.
Avatar billede martin_moth Mester
14. januar 2003 - 15:34 #8
Ja ja ja :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester