Avatar billede harrybal Nybegynder
22. juli 2003 - 15:01 Der er 20 kommentarer

sidste linjer fra en indkopiering txt fil.

Jeg skal læse data fra en txt fil, men kan ikke stoppe i sidste linje og dermed får jeg fejlmeddelelsen: input past end of file
Avatar billede nmh Nybegynder
22. juli 2003 - 15:05 #1
sådan:


While not Stream.AtEndOfStream
  txt=stream.readlin()
  .....
wend
Avatar billede nmh Nybegynder
22. juli 2003 - 15:09 #2
Her er det lidt mere fyldigt og med rettlese af en skrivefejl.  (readlin skal være readlin)

Set Filsystem=Server.CreateObject("Scripting.FileSystemObject")
Set stream=Filsystem.OpenTextFile("D:\.....")

While not Stream.AtEndOfStream
  txt=stream.readline()
  .....
wend
Avatar billede harrybal Nybegynder
22. juli 2003 - 15:53 #3
While Not EOF(Filnr)
Input #Filnr, Col, Key, Dec, Stract
wend, gør ikke jobbet, men du mener at jeg skal oprette txt som en strøm, men blive det ikke vanskeligere at få fat på data?, lige er de kommasepareret...
Avatar billede nmh Nybegynder
22. juli 2003 - 16:16 #4
Hvis dine data er kommasepareret er det let at "pakke dem ud" på denne måde:
Dim txt, A, n
txt="abe,katten,er,lille"
A=split(txt,",")
n=Ubound(A)
nu er A et array og n=4 elementer, og der gælder
A(0)="abe", A(1)="katten",... A(3)="lille"

En tekst-fil håndteres bedst som en stream.
Avatar billede nmh Nybegynder
22. juli 2003 - 16:17 #5
jeg vrøvler. n er 3.
Avatar billede harrybal Nybegynder
22. juli 2003 - 16:27 #6
hvordan får jeg hele txt fil, den har ikke noget fast antal linjer eller data, så skal der sorteres med en for løkke ud sættes inde i tabellerne med en sql comando...
Avatar billede nmh Nybegynder
22. juli 2003 - 16:31 #7
Prøv at give et eksempel her på hvordan tekstfilen kunne se ud.
Er det sådan, at hver linie svarer til en post i databasen?
Avatar billede nmh Nybegynder
22. juli 2003 - 19:44 #8
Den kode jeg gav dig ovenfor virker kun i VBscript. jeg havde egentlig troet det var en let sag, at få det til at virke i Visual Basic (sådan plejer det at være). Her er nu en løsning, der virker i Visual Basic:
Private Sub Hentfil()
  Dim tmp As String
  Dim txt As String
  Open "D:\test.htm" For Input As #1
  While Not EOF(1)
    Line Input #1, tmp
    txt = txt & tmp & vbCrLf
  Wend
  MsgBox txt
End Sub

Jeg håber ikke mit dårlige forslag har drillet dig for meget.
Jeg håber du vil fortælle noget mere om dine data.
Avatar billede harrybal Nybegynder
23. juli 2003 - 08:56 #9
Txt fil skal indeholde data fra forskellige tabeller (output) som derefter skal læses igen af en anden bruger og indsættes i lignende tabeller til en anden database. for eks. outfil kan se sådan ud:
"data1", "data2", "data3", "data4" (data fra en tabel eller to)
...

"nydata1", "nydata2", "nydata3", "nydata4"...(data fra andre tabeller)
...
dette txtfil skal læses igennem og indsættes i deres respective tabeller,
problemet med input er at stoppe når den sidste linjer er læst..
Avatar billede nmh Nybegynder
23. juli 2003 - 10:23 #10
Den VB-procedure HentFil, jeg sidst sendte har denne egenskab. Den stopper, når der ikke er mere at hente. Det er en let sag, at splitte en linie op i de rigtige del, da dine data jo er adskilt af komma. Det er blot at benytte split-metoden: A=split(txt,","). Men er dine problemer så ikke løst nu?
Avatar billede harrybal Nybegynder
23. juli 2003 - 10:33 #11
nej, men line inut #1 tmp, jeg kan kun læse og fat på det første værdi i linjen, eller er hele linjen samlet som en streng og skal man splite den af, som vist før "data1"...kan være 2 eller flere linjer, og det samme med "data1"
jeg sender koden...
    Open Filnavn For Input As #Filnr

        Input #Filnr, ColnoTxt, Descr, ItemRepId, Total, ReportQty, EndSeq
        If ColnoTxt1 = "End" Then
            Close #Filnr
            Exit Function
        Else
        Do
            If ItemRepId = "ItemKey" And ColnoTxt1 <> "End" Then
               
                Input #Filnr, ColnoTxt1, IGrpKey, ItemKey, Descr1, Substract, Ekstra
                If ColnoTxt1 = "End" Then
                    Close #Filnr
                    Exit Function
                Else
                    If IGrpKey <> "tom" Then
                    MsgBox "Frafilen: " & ColnoTxt1 & "," & IGrpKey & "," & Descr1 & "," & Substract
                    'DoCmd.RunSQL " INSERT INTO LtItemRepDtl " _
                    & "(ColNo, IGrpId, Subtract) VALUES (" _
                    & ColnoTxt & ",'" & IGrpId & "'," & Substract & ");"
                    'Else
                    'Exit Do
                    End If
   
                'Input #Filnr, ColnoTxt1, IGrpKey, ItemKey, Descr2, Substract2
                    If ItemKey <> "tom" Then
                    'DoCmd.RunSQL " INSERT INTO LtItemRepDtl " _
                    & "(ColNo, ItemId, Subtract) VALUES (" _
                    & ColnoTxt & ",'" & ItemId & "'," & Substract2 & ");"
                    MsgBox "Frafilen: " & ColnoTxt1 & "," & "," & Descr2
                    'Else
                    'Exit Function
                    End If
                End If
            Else
           
                Input #Filnr, ColnoTxt, Descr, ItemRepId, Total, ReportQty, EndSeq
                MsgBox "Filefrom: " & ColnoTxt & "," & ItemRepId & "," & Descr & "," & ReportQty & "," & Total
       
                'DoCmd.RunSQL " INSERT INTO LtItemRepCol " _
                & "(ColNo, Descr, ReportQty, Total, EndSeq) VALUES (" _
                & ColnoTxt & ",'" & Descr & "'," & ReportQty & "," & Total & "," & EndSeq & ");"
            'Loop
            End If
        Loop Until EOF(Filnr)
        End If
    Close #Filnr
Avatar billede nmh Nybegynder
23. juli 2003 - 11:03 #12
I din allerførste linie
input #Filnr,colnr,colnoTxt,...
skulle der ikke stå colnotxt1 her?
I hvert fald, hvis man sørger for kun at læse fra en fil når EOF(filnr) ikke er sand, kan man aldrig gøre noget galt.
Det er derfor bedst at lave sine løkker således:
while not EOF(filnr)
  Input #filnr,colnotxt1,....
  .......
wend
Jeg forstår nu, hvordan  du har organiseret dine data,
og så skal man selvfølgelig ikke benytte Line Input, men det du gør.
Avatar billede harrybal Nybegynder
23. juli 2003 - 11:26 #13
du mener at jeg skal lá' være med at bruge do..loop until..
og i stedet det du foreslog, eller ...nå jeg prøver,...
jeg ved at få en masser af grå...
Avatar billede harrybal Nybegynder
23. juli 2003 - 11:27 #14
..hår
Avatar billede nmh Nybegynder
23. juli 2003 - 11:47 #15
ja. Prøv at begynde helt forfra. Din kode er jo ikke ret stor.
Sørg for først at kunne læse hele filen uden fejl. Bagefter kan du så begynde på at håndtere dine data.
Var der ikke et problem med colnoTxt og colnoTxt1 i begyndelsen?
Avatar billede harrybal Nybegynder
23. juli 2003 - 12:22 #16
jeg får det rigtige data indtil itemrepid = itemrepid, her prøver at læse den næste linjer som indeholder nogle data som jeg skal bruge, det og det blver læst rigtigt, men koden prøve at læse næste linjer selvom filen er slut. hvis jeg sætte at stoppe hvis colnotxt1 = "" så stopper den men fordi den har ikke læst den sidste linje... jeg er nødt til at læse sidste linje for at stoppe koden, havde tænke med at tilføje "end" som sidste linje men det giver det samme problem, (jeg bruger nu while not eof() i stedet for do...)
problemer er at jeg har iden sidste del af min txt fil data til to forskellige tabeller og det ikke fastsat hvilken af dem kommer,..kæmpe videre... tak for rådet
Avatar billede harrybal Nybegynder
23. juli 2003 - 13:05 #17
jeg tror at jeg har løst "sidste linje" problemet, jeg skulle kun while ..wend en gang i alt. nu vil jeg se om jeg kan få fat på det rigtige data ind i tabellerne... det var før problemer med dubletter...
Avatar billede fynbohans Nybegynder
24. juli 2003 - 07:57 #18
For det første:
Med dansk tegnsæt, hvor vi bruger komma som decimaltegn, er skilletegnet i en CSV-fil ;(semikolon). Elles kan der ikke skelnes mellem decimaltal og heltal.
En CSV-post slutter altid med et linjeskift og du kan derfor altid finde slutningen af en tekstblok med CSV-data med
Instr(Text,vbCrLf). Hvis resultatet her = 0 er der ikke flere poster.
Avatar billede Jørgen Kirkegaard Professor
26. juli 2003 - 16:20 #19
Skulle vi lige se på problemet?  23/07-2003 08:56:56 skriver du "Txt fil skal indeholde data fra forskellige tabeller (output) som derefter skal læses igen af en anden bruger og indsættes i lignende tabeller til en anden database." Jamen, var det ikke bedre at udveksle dette i Access-tabeller, som alle havde adgang til?
Avatar billede nmh Nybegynder
29. juli 2003 - 10:48 #20
Nå, hvordan går det så nu?
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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