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

VBS CSV Dateien auslesen und neu Schreiben

Frage Entwicklung VB for Applications

Mitglied: MarcoIT

MarcoIT (Level 1) - Jetzt verbinden

22.06.2011, aktualisiert 16:42 Uhr, 11513 Aufrufe, 7 Kommentare

Hallo Zusammen,

ich versuche gerade 2 Dateien auszulesen und in einer neuen Datei formatiert in eine art Tabelle zu schreiben.

Ich habe bereits versucht mit einer FOR-Schleife meine Dateien zu zählen und diese in einen Array zu schreiben.
Dies geht aber nicht. Ich bin aber soweit, dass ich meinen Text aus beiden Quelldateien erhalte aber nicht "formatiert" in eine neu erstellte Datei einschreiben lassen kann.
Bisher habe ich alle Inhalte untereinander aber wie ich möchte:

Zeile1 Text1 aus Datei1; Zeile1 Text1 aus Datei2;
Zeile2 Text2 aus Datei1; Zeile2 Text2 aus Datei2;
usw...

Die Quelldateien sind einfache CSV Dateien die mit einem Semikolon getrennt werden.
Wenn ich meine Dateien in meinem Ordner zählen möchte kommt immer der Fehler das ein Anweisungsende erwartet wird aber wieso? Andere haben das im Internet auch verwendet:

01.
Dim fol As FileSystemObject 
02.
 
03.
Basis = "C:mein pfad mit Ordner\" 
04.
 
05.
	Dim Verzeichnis As Folder 
06.
        Set fol = New FileSystemObject 
07.
	Set Verzeichnis = fol.GetFolder(Basis) 
08.
	'Anzahl der Dateien im Odrner (ohne Unterverzeichnisse): 
09.
        anz = Verzeichnis.Files.Count 
10.
	MsgBox (anz)
Ich bekomme das nicht hin mit den Dateien in einen Array speichern bzw nacheinander auszulesen und per FOR Schleife die Text zu schreiben.
Hier mein bisheriger Quellcode:

01.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
02.
Set objFile = objFSO.OpenTextFile("C:\mein pfad\desktop\csv_neu.csv", 1) 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
Set fsoc = fso.CreateTextFile("C:\mein pfad\csv_neu_neu.csv", 1) 
05.
Set txtfile = objFSO.OpenTextFile("C:\mein pfad\CSV\csv1.txt", 1) 
06.
Set txtfile2 = objFSO.OpenTextFile("C:\mein pfad\desktop\CSV\csv2.txt", 1) 
07.
REM Set txtfile = objFSO.ReadTextFile("C:\mein pfad\16029105-37837.txt", 1) 
08.
 
09.
IF objFile is nothing	Then 
10.
	 
11.
	Wscript.Echo("objFile ist nichts") 
12.
	Wscript.Exit() 
13.
	 
14.
END IF 
15.
	 
16.
	FileName = "csv_neu.csv" ' Der Name der neu erstelen Datei in diese werden die Daten eingeschrieben 
17.
	 
18.
	Const fsForReading = 1 
19.
	Dim oStream ' As TextStream 
20.
	Dim FileName ' As String 
21.
	Dim anzahl ' As Integer 
22.
	Dim a ' As String 
23.
	Dim result ' As String 
24.
	Dim strDateiname, strInhalt, strInhaltHTML ' As String 
25.
	Dim objFs           ' FileSystemObject Objekt 
26.
	Dim objTextStream   ' Textstream Objekt 
27.
	 
28.
	 
29.
	Basis = "C:\mein pfad\desktop\CSV\" 
30.
	Typ = "txt" 
31.
 
32.
Set oStream = objFSO.CreateTextFile(FileName, True)	' Ist die csv_neu.csv oben deklariert 
33.
 
34.
IF oStream is nothing Then 
35.
 
36.
	Wscript.Echo("oStream ist nichts") 
37.
	Wscript.Exit() 
38.
 
39.
END IF 
40.
	 
41.
	Dim fol As FileSystemObject 
42.
	Dim Verzeichnis As Folder 
43.
    Set fol = New FileSystemObject 
44.
	Set Verzeichnis = fol.GetFolder(Basis) 
45.
	'Anzahl der Dateien im Odrner (ohne Unterverzeichnisse): 
46.
    anz = Verzeichnis.Files.Count 
47.
	MsgBox (anz) 
48.
	 
49.
FOR EACH Datei in fso.GetFolder(Basis).Files 
50.
	 
51.
		strDateiname = Datei 
52.
		 
53.
		Set objFs = CreateObject("Scripting.FileSystemObject") 
54.
		Set objTextStream = objFs.OpenTextFile(strDateiname, fsForReading) 
55.
		strInhalt = objTextStream.ReadAll 
56.
				 
57.
		a = Split(result, ";") 
58.
		 
59.
		oStream.WriteLine Trim(a(0))    ' Die writeline mache ich nur testweise das ganze wird noch automatischgemacht da die csv nicht immer nur 6 zeilen beinhaltet 
60.
		oStream.WriteLine Trim(a(1)) 
61.
		oStream.WriteLine Trim(a(2)) 
62.
		oStream.WriteLine Trim(a(3)) 
63.
		oStream.WriteLine Trim(a(4)) 
64.
		oStream.WriteLine Trim(a(5)) 
65.
		 
66.
		result = Join(a, ";" & vbCrLf) 
67.
		 
68.
NEXT 
69.
objFile.Close 
70.
txtfile.Close
Hoffentlich könnt ihr mir helfen wäre super nett.

Grüßle Marco

EDIT:

Habe mir noch einen kleinen "Pseudo Code" erstellt:


Datei1 open read
Datei2 open read
Datei3 open write
Schleife FOR EACH Zeile aus Datei 1 + 2
Lesen aktuelle (cur) Zeile von Datei1 in Array1
Lesen aktuelle (cur) Zeile von Datei2 in Array2
String3 = Funktion (Array1 , Array 2)
Write String3 in Datei3
Schleifen Ende
Datei 1 + 2 + 3 Close
Mitglied: Clijsters
22.06.2011 um 16:43 Uhr
Hallöle Marco,

Set objFSO = CreateObject("Scripting.FileSystemObject") [...]
Set fso = CreateObject("Scripting.FileSystemObject") [...]
Set objFs = CreateObject("Scripting.FileSystemObject") [...]

Normalerweise reicht es, einmal ein Objekt zu erstellen...

Ich habe das so verstanden, dass du mehrere CSVs zu einer zusammenfassen möchtest.
Das heisst, du definierst z.B. 4 CSVs, liest jede aus und schreibst dann den Inhalt in eine einzige.

Ich bekomme das nicht hin mit den Dateien in einen Array speichern bzw nacheinander auszulesen und per FOR Schleife die Text zu schreiben.
Wo genau hapert es denn?
u.U. daran, dass du die Dateien alle (zumindest, nachdem, was ich bisher gelesen habe) ausschließlich "ForReading"(1) öffnest?
Wenn du ein Array erstellst, in dem die Dateien vorhanden sind
z.B. Arr(0)="Datei1", Arr(1)="Datei2" usw.
Kannst du diese mit einer For-Schleife abarbeiten (For i = 0 to Arr.Count) (Wenn ich mich nicht irre)
und dann merken.
Für jede Datei erstellst du dann eine Zeile in deiner neuen CSV.
ungefähr so:
01.
'Deklarieren, definieren.... 
02.
'FUNKTIONSUNTÜCHTIGES BEISPIEL 
03.
For i = 0 to DateiArray.Count 
04.
      Do Until FSODatei.AtEndOfStream 
05.
            Dateialt = Dateialt & ";" & FSODatei.ReadLine 
06.
      Loop 
07.
       
08.
      FSODateiNeu.WriteLine Dateialt 
09.
      Dateialt = Nothing 
10.
Next 
11.
N

Gruß
Dominique
Bitte warten ..
Mitglied: MarcoIT
22.06.2011 um 17:07 Uhr
Also an dem ForReading (1) liegt es nicht, ich erhalte ja den Inhalt der Dateien(alt) in der Datei(neu)

Datei1 alt Inhalt:

Zeile1 Text1 aus Datei1 alt;
Zeile2 Text2 aus Datei1 alt;

Datei2 alt:

Zeile1 Text1 aus Datei2 alt;
Zeile2 Text2 aus Datei2 alt;

Und dann kommt das ganze in der neuen Datei so raus:

Zeile1 Text1 aus Datei1;
Zeile2 Text2 aus Datei1;

Zeile1 Text1 aus Datei2;
Zeile2 Text2 aus Datei2;

Das passt an sich... Ich werde mal deinen " 'FUNKTIONSUNTÜCHTIGES BEISPIEL " verwenden und ein wenig rumbasteln ich glaub ich bin gerade auf dem richtigen weg danke dir ;)
Bitte warten ..
Mitglied: bastla
22.06.2011 um 17:08 Uhr
Hallo MarcoIT!

Was es mit dem Dateien zählen auf sich hat, habe ich zwar noch nicht verstanden, aber wenn es darum geht, 2 Dateien zeilenweise zu kombieren, würde ich einfach beide in jeweils ein Zeilen-Array einlesen - schematisch etwa so:
01.
'... 
02.
Datei1Zeilen = Split(fso.OpenTextFile(txtfile1).ReadAll, vbCrLf) 
03.
Datei2Zeilen = Split(fso.OpenTextFile(txtfile22).ReadAll, vbCrLf) 
04.
 
05.
If UBound(Datei1Zeilen) <> UBound(Datei2Zeilen) Then 
06.
    WScript.Echo "Zeilenanzahl unterschiedlich!" 
07.
    WScript.Quit 1 
08.
End If 
09.
 
10.
Set Datei3 = fso.CreateTextFile(FileName) 
11.
For i = 0 To UBound(Datei1Zeilen) 
12.
    Datei1Felder = Split(Datei1Zeilen(i), ";") 
13.
    Datei2Felder = Split(Datei2Zeilen(i), ";") 
14.
    Datei3.WriteLine Trim(Datei1Felder(0)) & ";" & Trim(Datei2Felder(0)) & ";" '... 
15.
Next
Grüße
bastla
Bitte warten ..
Mitglied: Clijsters
22.06.2011 um 17:17 Uhr
Es ist aber ein FUNKTIONSUNTÜCHTIGES BEISPIEL ;)

Folgendermaßen sollte es gehen:
01.
'Hier wird das FileSystemObject kreirt... 
02.
Set FSO = CreateObject("Scripting.FileSystemObject") 
03.
'Die Dateien werden definiert, hier können beliebig vile Dateien verwendet werden... 
04.
Datei(0) = "CSV1.csv" 
05.
Datei(1) = "CSV2.csv" 
06.
Datei(2) = "CSV3.csv" 
07.
Datei(3) = "CSV4.csv" 
08.
 
09.
'Ausgabedatei 
10.
Dateineu = "Ausgabe.CSV" 
11.
'----------------------------------- 
12.
'AusgabeDatei zum Schreiben öffnen 
13.
FSOAusgabe = FSO.OpenTextFile(Dateineu, 2) 
14.
 
15.
'For Schleife für die ganzen Dateien 
16.
For i = 0 to Datei.Count 
17.
	FSOLese = FSO.Opentextfile(Datei(i), 1) 
18.
	'Schleife jeweils durch die Datei, bis zum Ende 
19.
	Do Until FSOLese.AtEndOfstream 
20.
		Eingang = Eingang & ";" & FSOLese.ReadLine '<- Jede Datei wird nur in eine Zeile geschrieben. Das ist änderbar. 
21.
	Loop 
22.
	'Date 1 wird in Zeile 1 geschrieben, Datei 2 in eine neue Zeile... 
23.
	FSOAusgabe.WriteLine Eingabe 
24.
	'Variablen werden dedefiniert, oder wie man es im Fachjargon auch nennen mag ;) 
25.
	FSOLese = Nothing 
26.
	Eingabe = Nothing 
27.
'Hier ist ende... 
28.
Next
In der Enddatei ist dann für jede Quelldatei eine Zeile vorhanden...
Wenn du die Dateien einfach hintereinander machen möchtest, setz das WriteLine in die Do Until Schleife...


Gruß
Dominique

[EDIT]
PS.:
Bastla machts besser -.-
Bitte warten ..
Mitglied: bastla
22.06.2011 um 17:51 Uhr
@Dominique01520
Danke für die Blumen
Wenn du die Dateien einfach hintereinander machen möchtest
... gib in der CMD-Shell den Befehl
copy "C:\mein pfad\CSV\csv*.txt" "C:\mein pfad\csv_neu_neu.csv"
ein und gut ist ...

Grüße
bastla
Bitte warten ..
Mitglied: MarcoIT
28.06.2011 um 11:24 Uhr
So hallo ihr Zwei,

erstmal danke ich Euch das ihr mir geholfen habt.
Es geht soweit alles jetzt kommt nur noch die Fehlermeldung:

Erlaubnis verweigert

Muss schauen ich glaube das das eine Windows Einstellung ist die mir das erstellen von Dateien per Script verbietet.

Also danke nochmal wünsche noch einen angenehmen Arbeitstag ;)

Gruß Marco
Bitte warten ..
Mitglied: Clijsters
28.06.2011 um 19:53 Uhr
[Nur OT]
Also danke nochmal wünsche noch einen angenehmen Arbeitstag ;)
Bitte/Danke - 8 Stunden, 34°C - Klimaanlage <> Vorhandensein

... gib in der CMD-Shell den Befehl
copy "C:\mein pfad\CSV\csv*.txt" "C:\mein pfad\csv_neu_neu.csv"
ein und gut ist ...
In Erinnerung an das VBScript, was Events in ein Exceldokument geschrieben hat, um es danach nach EventIDs zu ordnen.
...um später erschütternd zu merken, dass man in einer Listenansicht auch einfach auf die Spaltenüberschrift klicken kann xD
Unglaublich, aber war.
[/Nur OT]

Grüße zurück
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst 2 Csv -Dateien zum Teil zusammenfügen (6)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
gelöst CSV Dateien auswerten mit Script (8)

Frage von Crank69 zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

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 (17)

Frage von liquidbase zum Thema Windows Update ...