Top-Themen

Aktuelle Themen (A bis Z)

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 3 CSV Dateien automatisch einlesen und strukturiert in eine CSV integrieren

Mitglied: Jay0603

Jay0603 (Level 1) - Jetzt verbinden

21.08.2013 um 13:15 Uhr, 3567 Aufrufe, 4 Kommentare, 1 Danke

Hallo Zusammen,

ich habe leider keine Erfahrung mit VBA und versuche jetzt schon seit mehreren Tagen vergeblich eine Lösung für mein Problem zu finden. Da ich in diesem Forum viele gute, verwandte Beiträge gefunden habe, hoffe ich mich an euch wenden zu dürfen. Ich versuche aus 3 CSV Dateien die im Minutentakt aktualisiert werden immer die letzte (aktuellste) Zeile in einer gemeinsamen CSV Datei, transponiert in Spaltenform, darzustellen. Zudem sollte die erste Zeile der 3 CSV Dateien auch in Spaltenform in diese gemeinsamen CSV Datei übernommen werden.
Ich versuche das hier mal anhand eines Beispiels zu verdeutlichen:

Datei1.csv
Zeile 1 Text1;Text2;Text3;Text4
Zeile 2 Wert;Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert;Wert (aktuelle Werte)

Datei2.csv
Zeile 1 Text5;Text6;Text7
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)

Datei3.csv
Zeile 1 Text8;Text9;Text10
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)

Die gemeinsame CSV sollte wie folgt aussehen:

Gemeinsam.csv
Text 1;Wert
Text 2;Wert
.
.
Text10;Wert

Dabei sollten die Werte in Spalte 2 automatisch immer durch die neusten Werte der 3 CSV Dateien ersetzt werden.
Die gemeinsame CSV wird dann für eine andere Anwendung benötigt. Ich verwende MS Excel 2007.

Es wäre sehr schön wenn mir jemand weiter helfen könnte. Vielen Dank schon mal im vorraus!

MfG Jay

Mitglied: bastla
21.08.2013, aktualisiert um 14:49 Uhr
Hallo Jay0603 und willkommen im Forum!

Könnte etwa so gehen:
01.
Ein = Array("D:\Datei1.csv", "D:\Datei2.csv", "D:\Datei3.csv") 'Liste der zu verarbeitenden Dateien als Array
02.
Aus = "D:\Gemeinsam.csv" 'Ausgabedatei
03.
Delim = ";" 'Trennzeichen
04.

05.
Set fso = CreateObject("Scripting.FileSystemObject")
06.

07.
For Each Datei In Ein 'alle "Eingabe"-Dateien durchgehen
08.
    T = Split(fso.OpenTextFile(Datei).ReadAll, vbNewline) 'Dateiinhalt in Zeilenarray einlesen
09.
    F = Split(T(0), Delim) 'Feldnamen-Array aus Zeile 1 (= Index 0) erstellen
10.
    W = Split(T(UBound(T)), Delim) 'Werte-Array aus letzter Zeile erstellen
11.
    
12.
    For i = 0 To UBound(F) 'alle Felder durchgehen
13.
        'Ausgabe zusammensetzen: Zeilenschaltung + Feldname + Trennzeichen + Wert
14.
        A = A & vbNewline & F(i) & Delim & W(i)
15.
    Next
16.
Next
17.

18.
fso.CreateTextFile(Aus).Write Mid(A, 3) 'ohne erste Zeilenschaltung in Ausgabedatei schreiben
Vorausgesetzt (da nicht überprüft / abgesichert) wird, dass es in der letzten Zeile zumindest so viele Werte gibt, wie die erste Zeile Feldnamen enthält (und daher insbes nicht eine Zeilenschaltung am Dateiende vorkommt) ...

Grüße
bastla
Bitte warten ..
Mitglied: Jay0603
22.08.2013 um 11:32 Uhr
Hallo bastla,

vielen Dank für die schnelle Antwort und deine Bemühungen. Ich konnte die Funktion erst gerade eben testen. Leider bringt mir VB einen Laufzeitfehler mit der Fehlermeldung "Index außerhalb des gültigen Bereichs" bei folgender Zeile:

A = A & vbNewLine & F(i) & Delim & W(i)

Ich kenne mich leider viel zu wenig mit VB aus, werde aber versuche mich ein bisschen einzuarbeiten.

Grüße
Jay
Bitte warten ..
Mitglied: bastla
22.08.2013 um 14:29 Uhr
Hallo Jay0603!
Fehlermeldung "Index außerhalb des gültigen Bereichs"
wäre dann genau der Fall, den ich oben erwähnt hatte: Vermutlich enthält mindestens eine der CSV-Dateien am Ende eine Leerzeile ...

Falls ja, sollte es so gehen:
01.
Ein = Array("D:\Datei1.csv", "D:\Datei2.csv", "D:\Datei3.csv") 'Liste der zu verarbeitenden Dateien als Array
02.
Aus = "D:\Gemeinsam.csv" 'Ausgabedatei
03.
Delim = ";" 'Trennzeichen
04.

05.
Set fso = CreateObject("Scripting.FileSystemObject")
06.

07.
For Each Datei In Ein 'alle "Eingabe"-Dateien durchgehen
08.
    T = Split(fso.OpenTextFile(Datei).ReadAll, vbNewline) 'Dateiinhalt in Zeilenarray einlesen
09.
    F = Split(T(0), Delim) 'Feldnamen-Array aus Zeile 1 (= Index 0) erstellen
10.
    L = UBound(T) 'letzte Zeile ermitteln
11.
    'letzte nicht leere Zeile suchen
12.
    Do While Trim(T(L)) = ""
13.
        L = L -1
14.
    Loop
15.
    W = Split(T(L), Delim) 'Werte-Array aus letzter Zeile erstellen
16.
    
17.
    For i = 0 To UBound(F) 'alle Felder durchgehen
18.
        'Ausgabe zusammensetzen: Zeilenschaltung + Feldname + Trennzeichen + Wert
19.
        A = A & vbNewline & F(i) & Delim & W(i)
20.
    Next
21.
Next
22.

23.
fso.CreateTextFile(Aus).Write Mid(A, 3) 'ohne erste Zeilenschaltung in Ausgabedatei schreiben
Grüße
bastla
Bitte warten ..
Mitglied: Jay0603
22.08.2013 um 14:41 Uhr
Hallo bastla,

funktioniert genau wie beschrieben. Tausend Dank für deine Hilfe. Super Forum mit super Leuten hier!
Echt klasse!

Gruß
Jay
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Skript für: Automatisch generierte CSV Datei

gelöst Frage von janelsaesserBatch & Shell3 Kommentare

Hallo zusammen, für einen automatischen Upload von Bilder in unser Personalsystem, brauche ich ein Skript (am besten PowerShell) welches ...

VB for Applications

CSV Datei automatisch bearbeiten und abspeichern

gelöst Frage von klaus1985VB for Applications6 Kommentare

Hallo , Ich habe hier jeden Monat eine CSV Datei die in unserem ERP System generiert wird und von ...

Entwicklung

Aus Dateien Strukturiert XMLs erstellen

gelöst Frage von 122708Entwicklung24 Kommentare

Schönen guten Morgen, ich bin neu also verzeiht Eventuelle ungenaue Fragestellungen ;) Ausgangssituation: ca. 1600 1Kb große Dateien die ...

VB for Applications

CSV Inhalt automatisch bearbeiten - Wert verschieben

gelöst Frage von RJC-00VB for Applications5 Kommentare

Hallo zusammen, leider komme ich mit meinen eigenen Anstrenungen (Newbie) in Bezug auf VB Scripts leider nicht weiter und ...

Neue Wissensbeiträge
Internet

Schwarzer Tag für die Netzfreiheit: Die umstrittene Urheberrechtsreform wurde beschlossen

Information von Frank vor 13 StundenInternet22 Kommentare

Ich zitiere einfach mal Julia Reda von den Piraten, da mir selbst einfach die Worte dazu fehlen: Schwarzer Tag ...

Internet
Ist zwar keien Anleitung, aber
Anleitung von SachsenHessi vor 14 StundenInternet1 Kommentar

oder doch eine Anleitung ? Für die nächste EU-Wahl ? SH

PHP
Pfsense - Vouchergenerator 1.6.1
Anleitung von cafepost vor 15 StundenPHP

Hallo Zusammen , aus Sicherheitsgründen wurde mein Server auf den neuesten Stand gebracht, jetzt wollte ich den Vouchergenerator 1.6.1 ...

Internet

Verlag protestiert gegen Artikel 13 (jetzt Artikel 17) der geplanten EU-Verordnung

Information von Dilbert-MD vor 18 StundenInternet

Leider etwas spät, aber immerhin hat auch der heise-Verlag eingesehen, dass die Umsetzung der Urheberrechtsreform - so wie sie ...

Heiß diskutierte Inhalte
Internet
Schwarzer Tag für die Netzfreiheit: Die umstrittene Urheberrechtsreform wurde beschlossen
Information von FrankInternet22 Kommentare

Ich zitiere einfach mal Julia Reda von den Piraten, da mir selbst einfach die Worte dazu fehlen: Schwarzer Tag ...

Voice over IP
Mikrotik: Voip mit SIP Phones in verschiedenen Subnetzen mit FritzBox
Frage von SpartacusVoice over IP20 Kommentare

Hallo, ich habe das Problem, dass ich verschiedene SIP-Clients in unterschiedlichen Subnetzen habe, die mit meinem Server FritzBox7412 keine ...

Batch & Shell
Computer im Active Directory filtern
Frage von chkdskBatch & Shell16 Kommentare

Hallo Zusammen, ich möchte über die Powershell Computer im Active Directory filtern. Als Beispiel: listet mir alle Computer auf, ...

LAN, WAN, Wireless
Netzwerkkomponenten von 2011 und nur 100 Mbit?
gelöst Frage von FalaffelLAN, WAN, Wireless16 Kommentare

Hallo zusammen, ist es möglich, dass bei Netzwerkkomponenten von ca. 2011 nicht mehr wie 100 Mbit möglich ist? Konkret ...