02. december 2003 - 00:52Der er
23 kommentarer og 1 løsning
Tilføj linje i en csv fil
Jeg skal brugen en kode, som jeg kan sætte ind i en komandoknap i access, som tilføjer en linje i toppen af en csv fil, da csv filen ikke har feltoverskrifter, den skal f.eks tilføje følgende:
Felt1;Felt2;Felt3;Felt4;Felt5;Felt6
csv filen, hvor databasen skal tilføje denne linje i hedder e:\test.csv, bemærk at csv fil i forvejen indeholder en masser data.
Det bliver nok temmeligt svaert. Jeg tror den bedste mulighed vil vaere enten at gen-eksportere hvis det kommer fra din DB eller at hente hele indholdet af filen in, skrive headers efterfulgt af data til en ny fil.
Du som åbner csv-filen som en almindelig textfil og gemmer den igen. Se Visual Basic Hjælp under "Open Statement"; Mode = Binary. Hvis du kalder den hentede fil Text, gemmer du den som Felt1;Felt2;Felt3;Felt4;Felt5;Felt6 & Text.
Det der virker da ikke ?? den stopper i linjen hvor der stå write #1 ved punktet felt1
Private Sub Kommandoknap0_Click() Dim sFileName As String Open "c:\programmer\vkar2003\Nytekst.csv" For Output As #1 Write #1, Felt1, Felt2, Felt3, Felt4, Felt5, Felt6 Open "c:\programmer\vkar2003\x1.csv" For Input As #2 while not eof(#2) Input #2, Var1, Var2, Var3, Var4, Var5, Var6 Write #1, Var1, Var2, Var3, Var4, Var5, Var6 Wend Close #1 Close #2 DoCmd.TransferText acImportDelim, "Vkar", "X1", "c:\programmer\vkar2003\Nytest.csv" DoCmd.Close acForm, Me.Name
Open Filnavn For Binary Access Read As #Filnavn Get #Filnr, , Text Close #Filnavn
Text = EnPost & vbCrLf & Text Kill Filnavn Open Filnavn For Binary Access Write As #Filnavn Put #Filnr, , Text Close #Filnavn End Sub
Der er kun vist 2 felter og du skal være opmærksom på følgende: 1. Det vigtiske er du laver en sikkerhedkopi af din csv-fil. Linjen med "Kill" sletter filen før en ny gemmes - hvis et eller andet går galt. 2. I en csv-fil er der anførselstegn omkring tekst, men ikke omkring tal, derfor chr(34) ved tekst. 3. Der skal bruges forskellige c-funktioner her Csng. Ved heltal skal der bruges Clng.
Jeg får en kørsels fejl 13 "Type stemmer ikke overens" i den første linje hvor der står open filnavn, min opbygning af filen indeholder alle kolonner tekst på nær kolonne nr 3 som indeholder valuta, har det noget med det at gøre? jeg har vedhæftet min kode herunder, så du kan se hvad jeg har gjort ved den.
Private Sub Kommandoknap0_Click() Dim txtFilnavn As String Dim Filnr As Long Dim Filnavn As String Dim EnPost As String Dim FeltNr1 As String Dim FeltNr2 As String Dim FeltNr3 As String Dim FeltNr4 As String Dim FeltNr5 As String Dim FeltNr6 As String Dim Text As String
Blev desværre afbrudt flere gange da jeg skrev mit svar. Fejlen skyldes at linjen skal være:
Open Filnavn For Binary Access Read As #Filnr og tilsvarende Open Filnavn For Binary Access Write As #Filnr # er et nummertegn og skal altså følges af et tal.
Konverteringsfunktionen for valuta er CCur, dvs CCur(Felt2). Og så mangler der et par anførselstegn og alle skilletegn mangler:
Desværre var der også en sammenblanding med et andet programeringssprog jeg bruger meget, men følgende er testet og virker:
Private Sub CSV_KNAP_Click() Dim Filnr As Long Dim Filnavn As String Dim EnPost As String Dim FeltNr1 As String Dim FeltNr2 As Single Dim Text As String
FeltNr1 = [FELT1] 'tekst FeltNr2 = [FELT2] 'tal med decimaler
Det virker fint nok, bortset fra at den overskriver noget af den oprindelige 1. linje fra filen, kan man gøre et eller andet i write funktionen så felt1;felt2 osv slutter med et linje skift og så indsætter teksten?
Virker fint hos mig. Hvordan ser du fejlen? I Excel eller Notesblok? Er du sikker på at feltet med valuta virkelig er valuta(med kr. foran) og ikke Reeelt tal (Single)?
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.