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-Key: 322975

Url: https://administrator.de/contentid/322975

Printed on: April 25, 2024 at 17:04 o'clock

Member: Kraemer
Kraemer Dec 06, 2016 at 08:10:26 (UTC)
Goto Top
Member: Gurkenhobel
Gurkenhobel Dec 06, 2016 at 08:15:38 (UTC)
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...
Mitglied: 131381
131381 Dec 06, 2016 updated at 08:38:31 (UTC)
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ß
Member: Gurkenhobel
Gurkenhobel Dec 06, 2016 at 08:50:20 (UTC)
Goto Top
Hallo mikrotik,
Ja, das ist ein guter Ansatz. Jetzt bin ich erstmal beim Basteln...
Mitglied: 131381
Solution 131381 Dec 06, 2016 updated at 09:06:06 (UTC)
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
Member: Kraemer
Kraemer Dec 06, 2016 at 09:05:58 (UTC)
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
Member: Gurkenhobel
Gurkenhobel Dec 06, 2016 at 10:06:32 (UTC)
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...
Mitglied: 131381
Solution 131381 Dec 06, 2016 updated at 10:36:27 (UTC)
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.
Member: Gurkenhobel
Gurkenhobel Dec 06, 2016 at 11:18:13 (UTC)
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