stefanlausl
Goto Top

nur bestimmte Spalten aus csv Datei auslesen

Guten Morgen,

ich suche ein Lösung für folgendes Problem:

Ich hab in einem Batch mehrere csv Dateien deren Aufbeu eigentlich identisch sein sollte zu einer Datei zusammengefasst
und wollte diese in eine Tabelle vom SQL-Server 2000 importieren.
Der Import ist aber leider auf Fehler gelaufen da ab Zeile 67000 die Spalten nicht mehr mit den vorhergenden Zeilen übereinstimmen.

Jetzt zu meiner Frage:

Ich benötige nur die Spalten 1-7 der Datei.
Wie kann ich mittels Batch die Spalten 8-x aus der CSV-Datei löschen ?

Für eine Antwort wäre ich sehr dankbar.

Content-ID: 120169

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

Ausgedruckt am: 16.11.2024 um 11:11 Uhr

crashzero2000
crashzero2000 10.07.2009, aktualisiert am 18.10.2012 um 18:38:42 Uhr
Goto Top
Hy Stefan,

bastla ist im Urlaub [Hä - Hat er sich verdient], er könnte dir sicher was zaubern.

Er hat mir vor geraumer Zeit etwas in VB gescriptet das deiner Sache nahe kommt.
Wenn du etwas VBS kannst , kannst du damit sicherlich was anfangen, in dem Script werden auch Zeilen übersprungen da ich nur bestimmte benötigte und werden in eine andere Datei geschrieben.

Guckst du hier : Wie CSV per Batch oder VBS in Fremdformat umwandeln ?!

PS:Ich bin leider kein VBS´ler
-ricardo-
-ricardo- 10.07.2009 um 11:38:26 Uhr
Goto Top
-ricardo-
-ricardo- 10.07.2009 um 11:42:58 Uhr
Goto Top
Eine CSV kannst du auch mit Excel öffenen ...
Wenn die Datensätze nicht gerade mit einen ; getrennt werden müsstest du dann noch den Delimiter einstellen und hast es dann alles schön sauber in Spalten.

Dann kannst du alles bis auf Spalte 1-7 bzw A-G löschen und unter... Speichern unter .... als csv speichern...

geht am schnellsten :D bevor du anfängst zu proggen ... es sei denn du hast 100 von den Dateien
StefanLausL
StefanLausL 10.07.2009 um 11:50:04 Uhr
Goto Top
Hallo crashzero2000 ,

vielen Dank für den Link.
Werd ich mir gleich mal anschauen.
Bin zwar auch kein VBS'ler aber ich schau mal wie weit ich komme
StefanLausL
StefanLausL 10.07.2009 um 11:51:35 Uhr
Goto Top
Leider sind es mehrere Dateien die mehr als 65.000 Zeilen haben
d.h. mit Excel wird das nix. face-sad
-ricardo-
-ricardo- 10.07.2009 um 11:53:50 Uhr
Goto Top
Ja gut Zeilen das ist blöd..

Womit wolltest du es denn Programmieren ...

Vb?
60730
60730 10.07.2009 um 12:28:05 Uhr
Goto Top
Zitat von @-ricardo-:
Eine CSV kannst du auch mit Excel öffenen ..


Moinsen,

kaum ist der Bastla im Urlaub, tanzen die Mäuse auf dem Tisch


Als Batch - die so gut funktioneren sollte, daß nur ein "B" aus denm B Bereich dort was dran zu bemängeln haben kann...

Und trotzdem ungetestet aus dem Stehgreif....
for /f "tokens=1,7,1-7 delims=, " %%a in (pfad\zur\test.csv) do echo %%a,%%b,%%c,%%d,%%e,%%f,%%g>>pfad_zur_neuen7stelligen.csv  

Gruß
76109
76109 10.07.2009 um 13:50:42 Uhr
Goto Top
Hallo StefanLausL!

Sorry, habe mich verlesenface-smile

Gruß Dieter
StefanLausL
StefanLausL 10.07.2009 um 14:02:29 Uhr
Goto Top
Problem mit dem vbs Skript ist das irgendwann Runtime Error erscheint.
Aus welchen Gründen auch immer.

Der Batch von TimoBeil funktioniert an sich zumindest mit wenigen Daten.
Wenn ich den Batch an den Echtdaten anwende erscheint "Nicht genügend Arbeitsspeicher".
Die Datei ist im Momen 750 MB gross.

Die Datei wurde ja aus vielen anderen csv Dateien erzeugt bzw. zusammengefügt.
Wie kann ich einen Ordner nach csv Dateien durchsuchen und auf die gefunden Dateien diesen Batch
anwenden um diese dann erst im nächsten Schritt zusammen zu fügen ?
76109
76109 10.07.2009 um 14:27:58 Uhr
Goto Top
Hallo StefanLausL!

Falls Du mein VB-Script meinst, dann liegt das daran, dass ich nur von maximal 8 Spalten ausgegangen bin. Mehr hatte ich nicht vorgesehen. Ist aber kein Problem, mache nur noch ein paar Tests.

Gruß Dieter
76109
76109 10.07.2009 um 14:42:26 Uhr
Goto Top
Hallo nochmal!

Also, mit diesem Code müssen mindestens 7 Spalten vorhanden sein. Ab Spalte 8 werden alle Spalten ignoriert.

Diese Variante sollte in jedem Fall funktionieren:
Const iPath = "F:\$Scripts\Test\Import.Csv"  
Const ePath = "F:\$Scripts\Test\Export.Csv"  

Const Delim = ";"  'Bei Tab: Delim = vbTab  

Dim Fso, iFile, eFile, iText, eText(6), i

Set Fso = CreateObject("Scripting.FileSystemObject")  
Set iFile = Fso.OpenTextFile(iPath)
Set eFile = Fso.CreateTextFile(ePath)
    
Do Until iFile.AtEndOfStream
    iText = Split(iFile.ReadLine, Delim, 8)
    If UBound(iText) >= 6 Then
        For i = 0 To 6: eText(i) = iText(i): Next
        eFile.WriteLine Join(eText, Delim)
    End If
Loop

iFile.Close:  eFile.Close

MsgBox "Der Exportvorgang ist beendet!", vbInformation, "Meldung"  

Gruß Dieter

[edit] Text auf das wesentliche gekürzt [/edit]
StefanLausL
StefanLausL 10.07.2009 um 16:20:59 Uhr
Goto Top
Super !

Vielen,vielen Dank.

Das scheint zu funktionieren.
76109
76109 10.07.2009 um 18:08:29 Uhr
Goto Top
Hallo StefanLausL!

Prima, gern Geschehenface-smile

Gruß Dieter