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

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

Printed on: April 18, 2024 at 09:04 o'clock

Member: crashzero2000
crashzero2000 Jul 10, 2009, updated at Oct 18, 2012 at 16:38:42 (UTC)
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
Member: -ricardo-
-ricardo- Jul 10, 2009 at 09:38:26 (UTC)
Goto Top
Member: -ricardo-
-ricardo- Jul 10, 2009 at 09:42:58 (UTC)
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
Member: StefanLausL
StefanLausL Jul 10, 2009 at 09:50:04 (UTC)
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
Member: StefanLausL
StefanLausL Jul 10, 2009 at 09:51:35 (UTC)
Goto Top
Leider sind es mehrere Dateien die mehr als 65.000 Zeilen haben
d.h. mit Excel wird das nix. face-sad
Member: -ricardo-
-ricardo- Jul 10, 2009 at 09:53:50 (UTC)
Goto Top
Ja gut Zeilen das ist blöd..

Womit wolltest du es denn Programmieren ...

Vb?
Mitglied: 60730
60730 Jul 10, 2009 at 10:28:05 (UTC)
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ß
Mitglied: 76109
76109 Jul 10, 2009 at 11:50:42 (UTC)
Goto Top
Hallo StefanLausL!

Sorry, habe mich verlesenface-smile

Gruß Dieter
Member: StefanLausL
StefanLausL Jul 10, 2009 at 12:02:29 (UTC)
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 ?
Mitglied: 76109
76109 Jul 10, 2009 at 12:27:58 (UTC)
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
Mitglied: 76109
76109 Jul 10, 2009 at 12:42:26 (UTC)
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]
Member: StefanLausL
StefanLausL Jul 10, 2009 at 14:20:59 (UTC)
Goto Top
Super !

Vielen,vielen Dank.

Das scheint zu funktionieren.
Mitglied: 76109
76109 Jul 10, 2009 at 16:08:29 (UTC)
Goto Top
Hallo StefanLausL!

Prima, gern Geschehenface-smile

Gruß Dieter