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

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, 12540 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 ..
Ähnliche Inhalte
VB for Applications
CSV Datei mit VBS auslesen
Frage von scorpionesc83VB for Applications4 Kommentare

Hallo zusammen, ich bin in Sachen VBS ein totaler Anfänger und hoffe, dass ihr mir bei einem Problem helfen ...

VB for Applications
Bestimmte Spalten aus CSV-Datei auslesen (VBS)
gelöst Frage von GurkenhobelVB for Applications9 Kommentare

Hallo Community, wieder benötige ich einmal kompetente Hilfe. Mein Script zum Auslesen bestimmte Spalten aus CSV-Dateien (über 200 " ...

Batch & Shell
POWERSHELL txt auslesen mit csv oder mdb abgleichen und zusammen in neue datei schreiben
Frage von loannaBatch & Shell4 Kommentare

Hallo an alle Powersheller, brauche dringend Hilfe. Muss als Notlösung ein Script schreiben welches die unten aufgeführten Dinge abfrägt ...

Batch & Shell
Dateinamen mit vbs auslesen und in eine TXT Datei schreiben
gelöst Frage von KeiosIDBatch & Shell5 Kommentare

Hallo, ich hoffe mal, das ist das richtige Unterforum. Nach diversen suchen und Hilfe aus einem Windows Scripting Buch ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 StundeInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 4 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 5 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 8 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement18 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...