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...
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"
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...
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.
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..
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?
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
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.
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?
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
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...
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.
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?
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.