gurkenhobel
Goto Top

Bestimmte Spalten aus CSV-Datei auslesen (VBS)

Hallo Community,
wieder benötige ich einmal kompetente Hilfe. Mein Script zum Auslesen bestimmte Spalten aus CSV-Dateien (über 200 "Spalten" durch Seperator = Semikolon getrennt) funktioniert eigentlich ganz prima. Allerdings scheint mir die Aufzählung der Spalten bei Zeile 15 etwas umständlich. Gibt es eine einfachere Lösung, um jene Spalten (zusammenhängend wie im Beispiel 1&2, 4&5, 71bis76 oder auch die einzelne) anzugeben ? Über ein Array ? Für konstruktive Hilfe danke ich schon jetzt.

Set FSO=CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1
Dim FSO, Eingabe, Spalte, Spaltenauslese, TextZeile, Textdatei

Eingabe=Inputbox("Geben Sie die Quelldatei an:",,"BGRI11_163.csv")  

On Error Resume Next
Set FSO=CreateObject("Scripting.FileSystemObject")  
Set Datei = FSO.OpenTextFile(Eingabe, ForReading, False)
while not Datei.AtEndOfStream
TextZeile=Datei.Readline()
Spalte=Split(TextZeile,";")  
 
Set Textdatei = FSO.CreateTextFile("!"&FSO.GetFileName(Eingabe), True) 'Ergebnisdatei im gleichen Ordner abspeichern  
Spaltenauslese = Spalte(1) & ";" & Spalte(2) &";" & Spalte(4) &";" & Spalte(5) &";" & Spalte(33)&";" & Spalte(71) &";" & Spalte(72)&";" & Spalte(73)&";" & Spalte(74) &";" & Spalte(75)&";" & Spalte(76)  
Textdatei.WriteLine Spaltenauslese
wend
Datei.Close

Freundliche Grüße
G:H

Content-ID: 322975

Url: https://administrator.de/forum/bestimmte-spalten-aus-csv-datei-auslesen-vbs-322975.html

Ausgedruckt am: 06.01.2025 um 23:01 Uhr

Kraemer
Kraemer 06.12.2016 um 09:10:26 Uhr
Goto Top
Gurkenhobel
Gurkenhobel 06.12.2016 um 09:15:38 Uhr
Goto Top
hm, Danke für die schnelle Antwort erstmal.
Ich hätte aber gerne ein Lösung in Visual Basic Script (VBS), mit der PowerShell will ich nicht erst anfangen...
131381
131381 06.12.2016 aktualisiert um 09:38:31 Uhr
Goto Top
Nutze die Join() Funktion.

Spaltenauslese = Join(Array(Spalte(2),Spalte(3)),";")  
Oder schreibe die Spalten die du haben willst in ein Array und durchläufst dann dieses.

Gruß
Gurkenhobel
Gurkenhobel 06.12.2016 um 09:50:20 Uhr
Goto Top
Hallo mikrotik,
Ja, das ist ein guter Ansatz. Jetzt bin ich erstmal beim Basteln...
131381
Lösung 131381 06.12.2016 aktualisiert um 10:06:06 Uhr
Goto Top
Beispiel:
' Spaltennummern im Array angeben die du auslesen willst  
arrSpalten = Array(1,3)
Spalten = Split("Test1;Test2;Test3;Test4",";")  
For Each spalte In arrSpalten
	Spaltenauslese = Join(Array(Spaltenauslese,Spalten(spalte-1)),";")  
Next
Spaltenauslese = Mid(Spaltenauslese,2)
MsgBox Spaltenauslese
Kraemer
Kraemer 06.12.2016 um 10:05:58 Uhr
Goto Top
Zitat von @Gurkenhobel:

hm, Danke für die schnelle Antwort erstmal.
Ich hätte aber gerne ein Lösung in Visual Basic Script (VBS), mit der PowerShell will ich nicht erst anfangen...
Sorry - war der falsche Link
Gurkenhobel
Gurkenhobel 06.12.2016 um 11:06:32 Uhr
Goto Top
Danke für den Vorschlag.
Hmm im Prinzip gehts ja, nur bei mehrzeiligen Arrays wird das Ausgelesene immer an die vorhergehende Zeile angehängt:

ANO;N_EDIFICIOS_CLASSICOS;3BAS
NO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791
O;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969
;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998
N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017
_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890
EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890;2011;1482;1372
DIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890;2011;1482;1372;2011;2960;2672
kommentiere ich Deine Zeile 07 aus oder setze das Startargument von Mid auf 1 wird zwar nicht das erste Zeichen jeder Zeile abgeschnitten, dafür beginnt jede Zeile mit einem Semikolon:

;ANO;N_EDIFICIOS_CLASSICOS;3BAS
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890;2011;1482;1372
;ANO;N_EDIFICIOS_CLASSICOS;3BAS;2011;3544389;3219791;2011;3353610;3035969;2011;1111952;1052998;2011;2048;2017;2011;891;890;2011;1482;1372;2011;2960;2672

Habe schon einige Varianten probiert. Bin ziemlich am Verzweifeln...
131381
Lösung 131381 06.12.2016 aktualisiert um 11:36:27 Uhr
Goto Top
Wohl noch keinen Kaffee gehabt face-smile

Setze die Variable Spaltenauslese auf einen leeren String in jedem Durchlauf deiner Zeilen ... ist doch logisch da sonst alles aneinandergehängt wird face-smile

Das Spaltenauslese = Mid(Spaltenauslese,2) beseitigt nur das führende Semikolon jeder Zeile wenn der String leer ist.
Gurkenhobel
Gurkenhobel 06.12.2016 um 12:18:13 Uhr
Goto Top
DANKE,DANKE,DANKE

Es klappt wunderbar auch mit 28 Spalten...
Hätte man ja auch selbst darauf kommen können, den Leerstring vor die For Each-Schleife zu setzen...
Im übrigen bin ich nicht so der typische Gaffeesaxe. face-monkey

Danke. SCHÖN' ABEND und FROHE WEIHNACHT