Avatar billede kak Nybegynder
20. december 2004 - 16:53 Der er 8 kommentarer og
1 løsning

Læse værdier fra txt-fil

Jeg forsøger at læse værdierne fra en komma-separeret fil, men det virker kun delvist. Koden ser således ud:

  PathtoTextFile = "C:\inetpub\wwwroot\c5shop\importfiles\"
  conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & PathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=NO;FMT=Delimited"""
  rs.Open "select * from filnavn.txt", _
          conn, adOpenStatic, adLockReadOnly, adCmdText

  If Not (rs.BOF Or rs.EOF) Then
    rs.MoveFirst
    While Not rs.EOF
        MsgBox rs(0)
        MsgBox rs(1)
    rs.MoveNext
    Wend
  End If
--------------------------

MsgBox rs(0) virker fint. Den viser første værdi af alle linierne, men MsgBox rs(1) fejler. Den siger "Item cannot be found in the collection corresponding to the requested name or ordinal." og der ER flere værdier i hver linie.

filnavn.txt ser således ud:

"10",100,0,"a","test1"
"10",200,0,"b","test2"
"20",50,0,"a","test3"
"20",75,0,"b","test4"
---------------------------

Jeg har prøvet at sætte "" omkring alle værdierne og prøvet at skrifte kommaerne ud med tabulator. Men lige lidt hjælper det :-(
Avatar billede joern Nybegynder
20. december 2004 - 18:41 #1
Hej.

Jeg programmerer med VB5 og har for 20 år siden arbejdet med tidlige basic-versioner under DOS.  Derfor er min kode meget enkel og jeg kalder det 'husmands-programmering'.

Jeg laver mange programmer, der anvender ascii-filer til opbevaring af data og normalt er det linieskift der skiller felterne (VbCrLf) og jeg læser med Line Input.
I den enkleste form læser 'Input' jo netop til en separator - typisk komma.

Hvor Print # skriver en linie, der afsluttes med CrVbLf skriver Write # en variabel og skiller med 'komma', hvis ingen anden separator er valgt.
Dette lille eksempel har jeg lige lavet afprøvet.

Dim var As String
Private Sub Command1_Click()
  Input #1, var
  MsgBox var
End Sub

Private Sub Form_Load()
  Open App.Path & "\komma.txt" For Input As #1
End Sub


Tekstfilen består af  ole,er,sød

Håber det kan inspirere, - din syntaks kan jeg ikke kommentere.

M.v.h. Jørn
Avatar billede martin_moth Mester
21. december 2004 - 08:27 #2
Yep - du kan læse linie for linie helt enkeltvis, og seperere elementerne hver linie med Split()

Du kan fx. lave et array med din egen type:

Fx.

MyArray(1).1 = "10"
MyArray(4).4 = "a"
MyArray(3).5 = "Test4"

Hvis du er interesseret, kan jeg godt bikse sådan en lille løkke sammen
Avatar billede kak Nybegynder
21. december 2004 - 08:35 #3
joern, jeg ville gerne bruge den som en database hvis det er muligt. Ellers må jeg jo kigge på andre metoder :-)

martin_moth, jeg bruger VB5 og så vidt jeg ved, findes "split" ikke i den version?!

Men det jeg har lavet BURDE jo virke. Hvis muligt vil jeg gerne vide, hvorfor rs(1) ikke virker.
Avatar billede martin_moth Mester
21. december 2004 - 12:59 #4
Grunden til at jeg foreslår en alternativ løsning er, at jeg ikke har meget forstand på at åbne filen og få den ind i et recordset. Har aldrig set det før... Så jeg foreslår noget andet, fordi jeg er for dum til at forstå hvad du har gang i ;o)
Avatar billede joern Nybegynder
21. december 2004 - 13:28 #5
Hej.

Du får heller ikke nogen forklaring fra mig, jeg har aldrig beskæftiget mig med 'jetOle'.

M.v.h. Jørn
Avatar billede kak Nybegynder
21. december 2004 - 14:53 #6
Tjaaaa, mit forslag BRUDE virke, men sådan er der jo så meget :-) Så jeg skifter til dit forslag, joern.

Tak for hjælpen ;-)
Avatar billede joern Nybegynder
21. december 2004 - 17:47 #7
Hej, Tak for point.
Hvis du så hvad man kan udrette med simple metoder i VB ville du blive forbavset.
F.eks. at læse de sidste 128 bytes i en MP3-fil for at få fat i ID3-tags.

Data = ""
filepos = FileLen(mp3fil) - 127
Open thisfile For Binary As #2
  Get #2, lfilepos, Data
Close #2

Du skal se nogle 'herresving' jeg har set i andre kodeeksempler

M.v.h.  Jørn
Avatar billede joern Nybegynder
21. december 2004 - 17:49 #8
Data = ""
filepos = FileLen(mp3fil) - 127
Open mp3fil For Binary As #2
  Get #2, filepos, Data
Close #2

Rettelse, der var et l for meget, og en 'thisfile' i.s.f. mp3fil
Avatar billede martin_moth Mester
22. december 2004 - 06:19 #9
PS: Mht split, så kan man jo godt "splitte" uden at have funktionen split
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