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 Daten aus csv auslesen und in andere csv oder xls wegschreiben

Mitglied: OKIEH-44

OKIEH-44 (Level 1) - Jetzt verbinden

29.03.2009, aktualisiert 12:00 Uhr, 5066 Aufrufe, 5 Kommentare

Hallo an alle Fachleute und Spezialisten,

ich möchte ein Problem mit VBA lösen und habe in den veröffentlichten Codes immer nur faaast das Passende gefunden.

Hier nun mein spezielles Problem. Ich habe eine Menge csv-Dateien, deren Struktur immer gleich ist. Nur bestimmte Zahlenwerte sind immer verschieden.
Ich möchte jetzt aus jeder csv-Datei z.B. den Wert in Zeile 1000, vor dem ersten Komma (was in Excel A:1000 wäre) auslesen und in eine neue csv-Datei in Zeile 1 an die erste Stelle schreiben. Dann den Wert aus Zeile 1001 in die erste Zeile der neuen csv an die zweite Stelle kommagetrennt usw. Das z.B. bis Zeile 1005 (und alles in die erste Zeile der neuen csv kommagetrennt).
Wenn fertig, kommt die nächste Datei aus der Dateiensammlung ran. Wieder Zeile 1000 bis 1005 auslesen und kommageternnt in die zweite Zeile der neuen csv schreiben usw. bis alle Dateien durch sind.

Ich hoffe, ich konnte die Aufgabe verständlich beschreiben. Übrigens, ich möchte die neu erstellte csv dann mit Excel weiterbearbeiten. Man könnte also auch gleich eine Exceldatei erzeugen und die einzelnen Werte in die Spalten A bis E eintragen. Die nächste Datei muss dann die nächste Zeile füllen.

Schonmal vielen Dank für Eure geschötzte Hilfe.
Gruß
OKIEH-44
Mitglied: bastla
29.03.2009 um 15:52 Uhr
Hallo OKIEH-44!

Als Batch etwa so:
01.
@echo off & setlocal 
02.
set "Basis=D:\Deine CSV-Dateien" 
03.
set "Typ=csv" 
04.
set "Erg=D:\Gesamt" 
05.
set /a Von=1000 
06.
set /a Bis=1005 
07.
 
08.
set /a sk=Von-1 
09.
if exist "%Erg%" del "%Erg%" 
10.
for %%i in ("%Basis%\*.%Typ%") do call :ProcessFile "%%i" 
11.
move "%Erg%" "%Erg%.%Typ%" 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
set Zeile= 
16.
for /f "skip=%sk% tokens=1,2 delims=:," %%a in ('findstr /n "^" %1') do call :ProcessLine %%a "%%b" 
17.
>>"%Erg%" echo\%Zeile% 
18.
goto :eof 
19.
 
20.
:ProcessLine 
21.
if %1 gtr %Bis% goto :eof 
22.
set "Zeile=%Zeile%%~2%" 
23.
if %1 lss %Bis% set "Zeile=%Zeile%," 
24.
goto :eof
bzw doch als VBA-Version:
01.
Sub Sammle() 
02.
Basis = "D:\Deine CSV-Dateien" 
03.
Typ = "csv" 'in Kleinbuchstaben 
04.
Von = 1000 
05.
Bis = 1005 
06.
 
07.
Zeile = 3 'Daten werden ab dieser Zeile eingetragen 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
For Each Datei In fso.GetFolder(Basis).Files 
10.
    If LCase(fso.GetExtensionname(Datei.Name)) = Typ Then 
11.
        Spalte = 1'Daten werden ab dieser Spalte eingetragen 
12.
        Inhalt = Split(Datei.OpenAsTextStream.ReadAll, vbCrLf) 
13.
        For i = Von - 1 To Bis - 1 
14.
            Cells(Zeile, Spalte) = Split(Inhalt(i), ",")(0) 
15.
            Spalte = Spalte + 1 
16.
        Next 
17.
    End If 
18.
    Zeile = Zeile + 1 
19.
Next 
20.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: OKIEH-44
29.03.2009 um 17:09 Uhr
Hallo bastla,
vielen Dank für die schnelle Hilfe. Ich habe beide Codes getestet, allerdings nur mit wenig Erfolg.

Ich hab mir drei Test-Files csv angelegt. Zeile 1-3 sind mit zwei Werten kommagetrennt belegt.

Die Batch Datei liefert im cmd-Fenster folgenden Fehler:
"tokens=1,2 delims=:,"" ist syntaktisch an dieser Stelle nicht verarbeitbar"
Hier mein geänderter Code:

@echo off & setlocal
set "Basis=D:\Temp\versuch"
set "Typ=csv"
set "Erg=D:\Temp\versuch\Gesamt"
set /a Von=1
set /a Bis=3
set /a sk=Von-1
if exist "%Erg%" del "%Erg%"
for %%i in ("%Basis%\*.%Typ%") do call :ProcessFile "%%i"
move "%Erg%" "%Erg%.%Typ%"
goto :eof
:ProcessFile
set Zeile=
for /f "skip=%sk% tokens=1,2 delims=:," %%a in ('findstr /n "^" %1') do call :ProcessLine %%a "%%b"
>>"%Erg%" echo\%Zeile%
goto :eof
:ProcessLine
if %1 gtr %Bis% goto :eof
set "Zeile=%Zeile%%~2%"
if %1 lss %Bis% set "Zeile=%Zeile%,"
goto :eof

Die Ergebnisdatei csv wird angelegt, ist aber leer.

und hier mein geänderter Code für die Bearbeitung als Excelmakro:

Sub Sammle()
Basis = "D:\Temp\versuch"
Typ = "csv" 'in Kleinbuchstaben
Von = 1
Bis = 3

Zeile = 3 'Daten werden ab dieser Zeile eingetragen
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Basis).Files
If LCase(fso.GetExtensionname(alle.csv)) = Typ Then
Spalte = 1 'Daten werden ab dieser Spalte eingetragen
Inhalt = Split(Datei.OpenAsTextStream.ReadAll, vbCrLf)
For i = Von - 1 To Bis - 1
Cells(Zeile, Spalte) = Split(Inhalt(i), ",")(0)
Spalte = Spalte + 1
Next
End If
Zeile = Zeile + 1
Next
End Sub

Der Makroablauf bleibt schon in Zeile 1 hängen.

Hast Du einen Tipp für mich?
Gruß und Danke
OKIEH-44
Bitte warten ..
Mitglied: bastla
29.03.2009 um 17:33 Uhr
Hallo OKIEH-44!

Zum Batch: Lass einfach das "skip=%sk%" vor "tokens" weg, dann klappt's auch mit einer "Von"-Zeile 1 (aufgrund Deiner Vorgabe "Zeile 1000" war ich nicht davon ausgegangen, dass Du in Zeile 1 beginnen würdest, und habe versucht, den Ablauf durch Überspringen der ersten 999 Zeilen zu beschleunigen).
Zum Makro: Etwas leichter ginge es, wenn Du auch eine Fehlermeldung anzubieten hättest. Sollte diese Meldung "Variable nicht definiert" lauten, müsstest Du nur ein allfälliges "Option Explicit" entfernen (oder für jede verwendete Variable per "Dim" eine Deklaration vornehmen).

[Edit]
Bei genauerer Betrachtung fällt mir noch die Zeile
If LCase(fso.GetExtensionname(alle.csv)) = Typ Then
auf - diese sollte unverändert geblieben sein, also:
If LCase(fso.GetExtensionname(Datei)) = Typ Then
[/Edit]

Grüße
bastla

P.S.: Zum Posten von Batches/Scripts hätte die Forensoftware eine passende "Code"-Formatierung zu bieten ...
Bitte warten ..
Mitglied: OKIEH-44
29.03.2009 um 21:14 Uhr
Hallo bastla,
das batch läuft mit meinen drei Testfiles gut durch. (Allgemeines Aufatmen...) Dann habe ich einen Versuch mit 35 echten csv-files durchlaufen lassen. Die betreffenden Zeilen sind 3602 bis 3605. Das funktioniert dann wieder mit Deinem ersten script.
Morgen folgt ein scharfer Durchlauf mit einigen hundert Dateien.
Bis hierhin schonmal herzlichen Dank für die Hilfe.
Ich werde berichten...
Gruß
OKIEH-44
Bitte warten ..
Mitglied: OKIEH-44
31.03.2009 um 21:27 Uhr
Hallo bastla,
funktioniert. Alles Super, vielen Dank.
Gruß
OKIEH-44
Bitte warten ..
Ähnliche Inhalte
Windows Server

Powershell Daten sortiert in CSV XLS exportieren

gelöst Frage von earthheroWindows Server2 Kommentare

Schönen guten Tag zusammen, ich habe mir aus dem Internet ein entsprechendes Skript zur Auswertung von WSUS Update zusammengebastelt, ...

Microsoft

Bartender - kein Zugriff auf XLS-Daten

gelöst Frage von MiStMicrosoft5 Kommentare

Hallo, ich habe auf einem Client (Windows 10) MS-Office 2010 (64bit) und Bartender 9.4(r3) installiert. Bis Samstag konnte ich ...

Batch & Shell

Mittels Batch 700 TXT Files auslesen und in eine csv oder xls zusammenführen

Frage von jvpvlvBatch & Shell4 Kommentare

Hallo liebe Community bin mit Batch Skripten noch recht unerfahren. Ich habe ca 700 TXT Dateien die folgendermaßen formatiert ...

XML

CSV bzw. XLS Dateien in ein XML Schema einbinden

gelöst Frage von fisi-floXML3 Kommentare

Hallo allerseits, bisher habe ich von Lieferanten immer unterschiedliche Preislisten der Lieferanten im CSV oder XLS Dateiformat bekommen. Selbst ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 6 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 16 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...