CSV bestand met scheidingsteken een dubbele tab

Status
Niet open voor verdere reacties.

nieuwene

Gebruiker
Lid geworden
13 nov 2009
Berichten
17
Beste mensen,

Ik wil vanuit Acces 2003 (met VB) het resultaat van een query opslaan als een csv-bestand. Hierbij wil ik als scheidingsteken een dubbele tab.

Het lukt me wel om een het csv-bestand aan te maken, alleen lukt het me niet om dit te doen met als scheidingsteken een dubbele tab.

Heeft iemand tips voor me om het toch voor elkaar te krijgen?

Alvast bedankt voor de moeite!
 
Volgens de Exportspecificatiewizard is het niet mogelijk om meer dan één scheidingsteken te definiëren, dus tenzij iemand een briljant idee heeft, denk ik dat je het ermee zult moeten doen...
Je kunt waarschijnlijk het csv bestand daarna wel in Word openen, en een automacro starten die één ^t (de tab) vervangt door ^t^t (twee tabjes dus), maar ik denk niet dat het in Access kan.
 
CSV staat voor comma separated value, lijkt me logisch dat de komma dan het scheidingsteken is.
 
@Wim:
Afkortingen zijn ook maar afkortingen; dat neemt niet weg, dat je wel degelijk een tabgescheiden bestand kunt afleveren in CSV opmaak. Alleen geen twee tabs...
 
Ik zit er dan aan te denken om het bestand op te slaan met als scheidingsteken een ; en daarna de ; te vervangen door een dubbele tab. Bij voorkeur zou ik het vervangen willen automatiseren.

Kan iemand me hierbij helpen?
 
Met welk pakket wil je de ; laten vervangen? Word?
 
Ik wil het laten uitvoeren als je op een button drukt vamaf een access formulier
 
Dat vermoedde ik al... Maar verder? Welke Word versie bijvoorbeeld?
 
Sorry voor de late reactie....

Ik zat te denken om de ; te vervangen in notepad.
 
Ik weet niet hoe je dat zou moeten automatiseren; zelf denk ik aan een zelfstartend word-document, met een ingebouwde macro die bij openen de tekens vervangt. Dan kun je ook makkelijk een tab vervangen/exporteren. Dit proces kun je dan weer op de achtergrond aansturen vanuit Access, omdat je dan een Word-sessie kunt openen.
 
Ik wil vanuit Acces 2003 (met VB) het resultaat van een query opslaan als een csv-bestand. Hierbij wil ik als scheidingsteken een dubbele tab.

Bouw het exportbestand op via VBA met een recordset, met als bron de query, en geef dan je 'eigen' scheidingsteken mee.
 
Heb Harry z'n voorstel uitgeprobeerd, en inderdaad, best wel makkelijk eigenlijk! Scheelt een hoop gedoe in Word...

Mijn code ziet er zo uit:

Code:
Private Sub Knop21_Click()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tArtikelen")
Dim fs, TextFile
Dim sRegel As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set TextFile = fs.CreateTextFile("H:\testfile.csv", True)

Do While Not rst.BOF And Not rst.EOF
    sRegel = ""
    sRegel = rst.Fields(0) & ";;" & rst.Fields(1) & ";;" & rst.Fields(2)
    TextFile.WriteLine (sRegel)
    rst.MoveNext
Loop

TextFile.Close
Set TextFile = Nothing
rst.Close
Set rst = Nothing

End Sub

En het resultaat van de uitvoer is dan:

0601-1;;Gender changers;;6,9
1979-3;;Verlengsnoer Muis 180 cm;;7,2
223149;;Spuitbus lucht;;10,66
237386;;Maxtor Harddisk;;49
237615;;Harde schijf;;75
293344-B25;;Accu Laptop EVO N600C;;189
39000835;;Verlengsnoer 4sockets + schakelaar;;12,48

Ik heb de eerste drie velden genomen, maar je kunt de veldnummering ook veranderen in
rst.fields("Artikelnaam") als je veel kolommen hebt.
 
En de ultieme oplossing: Dubbele Tab-gescheiden csv bestand...

Code:
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tArtikelen")

Dim fs, TextFile, varOutput
Dim sRegel As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set TextFile = fs.CreateTextFile("H:\testfile.csv", True)

Do While Not rst.BOF And Not rst.EOF
    sRegel = ""
' Gebruik deze regel als je tabs wilt als scheidingsteken
    sRegel = rst.Fields(0) & Chr(9) & Chr(9) & rst.Fields(1) & Chr(9) & Chr(9) & rst.Fields(2)
' Gebruik deze regel als je punt-komma's wilt als scheidingsteken
''    sRegel = rst.Fields(0) & ";;" & rst.Fields(1) & ";;" & rst.Fields(2)
    TextFile.WriteLine (sRegel)
    rst.MoveNext
Loop

TextFile.Close
Set TextFile = Nothing
rst.Close
Set rst = Nothing
 
Bedankt, hier kan ik mee vooruit!.

Wel heb ik nog twee vragen:

1) hoe kan ik codetabel UTF-8 meegeven aan het bestand?

2) als ik de ";;" vervang door " " zijn het in het betand niet twee tabs. Wat moet ik tussen de "" zetten om werkelijk twee tabs te krijgen in het bestand?
 
Ik denk dat je mijn code niet goed gelezen hebt :)
sRegel = rst.Fields(0) & Chr(9) & Chr(9) & rst.Fields(1) & Chr(9) & Chr(9) & rst.Fields(2)
zorgt voor de dubbele tab...
 
Als je eenmaal bezig bent....
Hier een variant waarbij je in één keer de hele tabel wegschrijft. Deze haalt ook de kolomkoppen er netjes bij.
Deze variant is ook de snelste, omdat je niet door de recordset hoeft te lopen...

Code:
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim fld As ADODB.field
Dim strSQL As String
Dim fs, TextFile, varOutput
    
    strSQL = "SELECT * FROM tArtikelen"
    'Recordset openen in Tekstmodus
    With rst
        .CursorLocation = adUseClient
        .Open strSQL, CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText
    End With

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set TextFile = fs.CreateTextFile("H:\testfile v2.csv", True)

    rst.MoveFirst
    'Eerst de lijst met veldnamen maken.
    For Each fld In rst.Fields
        strSQL = strSQL & "," & fld.Name
    Next fld
    Do While Right(strSQL, 1) = ","
        strSQL = Left(strSQL, Len(strSQL) - 1)
    Loop
    strSQL = strSQL & vbCrLf
    'Dan de Output samenstellen met GetString en dubbele tabs
    varOutput = strSQL & rst.GetString(adClipString, -1, vbTab & vbTab, vbCrLf)
    'Tekst bestandje wegschrijven..
    TextFile.WriteLine (varOutput)
    
    TextFile.Close
    Set TextFile = Nothing

Stoppen:
On Error Resume Next
''rst.Close
Set rst = Nothing
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan