Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV zu TXT automatisiert mit Access

Frage Microsoft Microsoft Office

Mitglied: Stelli

Stelli (Level 1) - Jetzt verbinden

11.02.2011 um 08:38 Uhr, 4647 Aufrufe, 7 Kommentare

Moin,

hab ein etwas komplizierteres Problem:

Ich habe eine CSV Datei vorliegen mit Kontaktdaten. Hier stehen alle Informationen über bestimmte Mitarbeiter drin, von denen aber nur ein paar benötigt werden. Alle Attribute sind mit Semikolons getrennt. Wenn ich nun Access 2007 öffne und hier auf "öffnen" klicke und die CSV Datei auswähle, muss ich ihm in diesem Assistenten sagen, dass alle Spalten mit Semikolons getrennt sind und Access ordnet mir die Attribute in die richtigen Spalten. Insgesamt sind das 19 Stück. Von diesen 19 Spalten benötige ich aber nur 4 Stück. Also wähle ich nur die 4 Stück aus die ich benötige und fertig. Wenn ich jetzt manuell auf Export klicke und wähle aus, dass er mir diese 4 Spalten in eine txt Datei exportieren soll, kann ich ihm in diesem Export Assistenten sagen, dass ich die verschiedenen Spalten wieder mit Semikolons getrennt haben möchte. Export funktioniert.

Als Beispiel hier mal ein Datensatz aus der CSV:

Nachname;Vorname;Status;Vollständiger Name;E-Mail gesch;Telefon Gesch; Telefon privat;E-Mail Privat;Geschlecht;Geburtsdatum; usw usw usw...

Jetzt wollte ich das ganze automatisch ablaufen lassen...
Hierzu habe ich in Access ein Modul erstellt, das wie folgt aussieht:

Function autoexec()
On Error GoTo autoexec_Err
DoCmd.SetWarnings (Warningsoff)
DoCmd.TransferText acExportDelim, , "Kontakte", "C:\test.txt", True


autoexec_Exit:
Exit Function

autoexec_Err:
MsgBox Error$
Resume autoexec_Exit

End Function

Soweit so gut...
Jetzt habe ich ein Makro gebaut indem die Funktion autoexec ausgeführt wird...
Wenn ich das Makro starte, startet bekomme ich nun folgende Fehlermeldung: "Das Feldtrennzeichen für die angegebene Textdatei entspricht dem Dezimaltrennzeichen oder Texttrennzeichen"

Wenn ich nun meinen oben genannten Code nicht mit Semikolon sondern mit TABS exportieren lasse funktioniert es.. ich benötige aber Semikolons...

Weiß hier jemand Rat??

Vielen Dank

Gruß Stelli
Mitglied: bastla
11.02.2011 um 09:53 Uhr
Hallo Stelli!

Du hast also nur vor, aus der CSV eine TXT zu machen, ohne die Daten in Access zu bearbeiten? Falls ja, würde ich ganz einfach VBS dafür verwenden - ungetestet:
01.
CSV = D:\Deine Kontaktdaten.csv" 
02.
TXT = "D:\test.txt" 
03.
Delim = ";" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Satz = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 'zeilenweise in Array einlesen 
07.
 
08.
Set TXTFile = fso.CreateTextFile(TXT) 
09.
For i = 0 To UBound(Satz) 
10.
    Feld = Split(Satz(i), Delim) 
11.
    TXTFile.WriteLine Feld(0) & Delim & Feld(1) & Delim & Feld(4) & Delim & Feld(5) 'nur benötigte Felder in die Textdatei schreiben 
12.
Next 
13.
TXTFile.Close 
14.
 
15.
WScript.Echo Ubound(Satz) + 1 & " Datensätze in """ & TXT & """ geschrieben."
Grüße
bastla
Bitte warten ..
Mitglied: Stelli
11.02.2011 um 10:32 Uhr
Hey danke für den Tipp,

habe es gleich mal ausprobiert. Kenne mich aber mit VBS nicht so wirklich aus. Wenn ich es jetzt starte bekommt ich die Fehlermeldung Objekt erforderlich. Eine Txt Datei wird angelegt. Allerdings hier auch mit den falschen Feldern und mit einem Leerschritt zwischen jedem Buchstaben und Zeichen.

Es kommt auch in der CSV vor dass mal ein Feld leer ist.. D.h. dass hier wo normalerweise eine telefonnummer zwischen zwei Semikolons Steht ( ;01711234567;) dann nur ein ;; steht. (wird das dann auch bei der Feldauswahl erkannt?)

CSV = "D:\Kontkate.csv"
TXT = "D:\test.txt"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Satz = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 'zeilenweise in Array einlesen

Set TXTFile = fso.CreateTextFile(TXT)
For i = 0 To UBound(Satz)

Feld = Split(Satz(i), Delim)

TXTFile.WriteLine Feld(1) & Delim & Feld(2) & Delim & Feld(7) & Delim & Feld(9)

Next

TXTFile.Close

WScript.Echo UBound(Satz) + 1 & " Datensätze in """ & TXT & """ geschrieben."
Bitte warten ..
Mitglied: bastla
11.02.2011 um 10:44 Uhr
Hallo Stelli!
mit den falschen Feldern und mit einem Leerschritt zwischen jedem Buchstaben und Zeichen.
"Falsche" Felder erhöltst Du, wenn Du vermutlich nicht die Feldnummer ab 0 gezählt hast /siehe mein Beispiel oben) - mit
01.
Nachname;Vorname;Status;Vollständiger Name;E-Mail gesch;Telefon Gesch; Telefon privat;E-Mail Privat;Geschlecht;Geburtsdatum; usw usw usw... 
02.
Nachname2;Vorname2;Status2;Vollständiger Name2;E-Mail gesch2;;;E-Mail Privat2;Geschlecht2;Geburtsdatum2; usw usw usw...
getestet sieht mein Ergebnis auch so aus:
01.
Vorname;Status;E-Mail Privat;Geburtsdatum 
02.
Vorname2;Status2;E-Mail Privat2;Geburtsdatum2
Wenn die Leerschritte tatsächlich zwischen allen einzelnen Zeichen auftauchen, könnte ev die CSV im Unicode-Format vorliegen - dann müsstest Du die Zeile 6 (zumindest in meinem Ansatz - bei Dir wird mangels "Code"-Formatierung ja keine Zeilennummer angezeigt) auf
Satz = Split(fso.OpenTextFile(CSV, 1, False, True).ReadAll, vbCrLf) 'zeilenweise in Array einlesen
ändern.

Wenn dann übrigens auch wieder Unicode geschrieben werden soll, wäre noch die Zeile 8 auf
Set TXTFile = fso.CreateTextFile(TXT, True, True)
anzupassen ...

Grüße
bastla
Bitte warten ..
Mitglied: Stelli
11.02.2011 um 11:23 Uhr
Vielen Dank funktioniert jetzt einwandfrei....

Hast du zufällig noch eine Lösung wie ich mehrere CSV Dateien einlesen und alles in eine TXT Datei bringen kann?
Bitte warten ..
Mitglied: bastla
11.02.2011 um 15:19 Uhr
Hallo Stelli!

Magst Du noch mehr über diese mehreren CSV-Dateien erzählen (wie etwa, wo/wie sie zu finden wären)?
Es gäbe übrigens eine ganz einfache Methode, alle Dateien eines Ordners mit einem CMD-Befehl zusammenzufassen (um dann stattdessen die Ergebnisdatei weiterzubearbeiten):
type D:\*.csv>D:\AlleKontakte.txt
Voraussetzung wäre hierfür nur, dass die jeweils letzte Zeile mit einer Zeilenschaltung endet.

Grüße
bastla
Bitte warten ..
Mitglied: Stelli
11.02.2011 um 15:27 Uhr
Also zur Zeit beläuft sich das ganz noch auf 1 CSV Datei die auf einem server liegt.. aber ich weiß schon, dass es demnächst wohl ein paar Dateien mehr geben wird die dann auch auf dem Server liegen werden... Möglich wäre dass sie in unterschiedlichen Ordnern liegen. und bevor ich anfange und alle txt dateien zusammenführen lasse wäre es ja ideal wenn das vbs programm einfach mehrere csv dateien einlesen und anschließend nach dem gleichen verfahren zusammen in eine txt datei schreibt...
Bitte warten ..
Mitglied: bastla
11.02.2011 um 15:37 Uhr
Hallo Stelli!

Wenn Du die Pfade kennst, ist das ja weiter kein Problem:
01.
AlleCSV = Array("D:\Kontkate.csv", "D:\Unterordner\Kontaktdaten2.csv", "D:\Textordner\Kontakt.txt") 
02.
TXT = "D:\test.txt" 
03.
Delim = ";" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Set TXTFile = fso.CreateTextFile(TXT) 
07.
 
08.
For Each CSV In AlleCSV 
09.
    Satz = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 'zeilenweise in Array einlesen 
10.
 
11.
    Satzanzahl = Satzanzahl + UBound(Satz) + 1 
12.
    For i = 0 To UBound(Satz) 
13.
        Feld = Split(Satz(i), Delim) 
14.
        TXTFile.WriteLine Feld(1) & Delim & Feld(2) & Delim & Feld(7) & Delim & Feld(9) 
15.
    Next 
16.
Next 
17.
 
18.
TXTFile.Close 
19.
 
20.
WScript.Echo Satzanzahl & " Datensätze in """ & TXT & """ geschrieben."
Voraussetzung dafür ist natürlich, dass der Satzaufbau in allen Einzeldateien gleich ist ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
Access Checkbox mit Kombifeld und dann filtern

Frage von atomas42 zum Thema Datenbanken ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...