yakazaa
Goto Top

Per Batch CSV Datei zeilenweise bereinigen

Hallo zusammen,

ich muss eine CSV Datei in ein Programm importieren, die im Prinzip SO aussieht:


H203000;;Überschrift 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (beliebig viele Simikolons (oder Simikolonne? :D))
1.0 Artikelgruppe 1
1.0.1 Artikelgruppen Unterkategorie 1
H203010;;H203010 Artikel 1;;;;;12,60;;;
H203020;;H203020 Artikel 2;;;;24,20;;;;
H203030;;H203030 Artikel 3;;;24,20;;;;;

1.0.2 Artikelgruppen Unterkategorie 2
H203000;;Überschrift 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (wieder beliebig viele Simikolonien..)
H204010;;H204010 Artikel 1;;;;;12,60;;;
H204020;;H204020 Artikel 2;;;;24,20;;;;
H204030;;H204030 Artikel 3;;;24,20;;;;;

Soweit so schlecht, denn in meinem Programm sollen hinterher nur die Zeilen übernommen werden, in denen auch tatsächlich Artikel stehen - keine Überschriften oder sonstiger Murks.

Zu allem Überfluss hab ich davon aktuell 5, bald aber noch mehr Dateien, in denen die Artikelnummern mal wie hier Hxxxxx sind, dann mal wieder Sxxxxx, usw.

Jetzt soll ein BATCH Script für mich aufräumen, daher meine Idee:

@ECHO OFF

SET Art_Nr_Prefix=H
SET FILENAME=preise_a

FINDSTR /c:"^%Art_Nr_Prefix%.......%Art_Nr_Prefix%" /g:"%FILENAME%.txt">%FILENAME%_sauber.csv  

Klappt aber nicht, kommt nur eine Fehlermeldung "FINDSTR: Cannot read strings from preise_a.txt" face-sad
Wo liegt mein Fehler?

Content-ID: 260805

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

bastla
Lösung bastla 22.01.2015, aktualisiert am 23.01.2015 um 09:19:25 Uhr
Goto Top
Hallo yakazaa!

Eher so:
@ECHO OFF & setlocal

SET "Art_Nr_Prefix=H"  
SET "FILENAME=preise_a"  

FINDSTR "^%Art_Nr_Prefix%......;;%Art_Nr_Prefix%" "%FILENAME%.txt">"%FILENAME%_sauber.csv"  
oder mit Zeile 6
FINDSTR "^%Art_Nr_Prefix%[0-9][0-9][0-9][0-9][0-9][0-9];;%Art_Nr_Prefix%" "%FILENAME%.txt">"%FILENAME%_sauber.csv"
[Edit]
Wenn Du tatsächlich verschiedene Prefixes berücksichtigen musst und gleich alle Dateien eines Ordners verarbeiten willst, würde ich eine Datei "D:\Artikel.pre" mit dem Inhalt
^H......;;H
^S......;;S
^X......;;X
^Y......;;Y
erstellen und etwa folgenden (ungetesteten) Code verwenden:
@echo off & setlocal
set "Ordner=D:\Artikeldaten"  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b/a-d *.txt') do findstr /g:"D:\Artikel.pre" "%%i">"%%~ni_sauber.csv"  
popd
[/Edit]

Grüße
bastla

P.S.:
beliebig viele Simikolons (oder Simikolonne? :D)
Eins von der Sorte ist jedenfalls sicher ein Semikolon ... face-wink
yakazaa
yakazaa 23.01.2015 um 09:24:41 Uhr
Goto Top
Zitat von @bastla:
...
> 
> FINDSTR "^%Art_Nr_Prefix%......;;%Art_Nr_Prefix%" "%FILENAME%.txt">"%FILENAME%_sauber.csv"  
> 

Perfekt, tut genau was es soll!!
Vielen, vielen Dank!!

Wenn Du tatsächlich verschiedene Prefixes berücksichtigen musst und gleich alle Dateien eines Ordners verarbeiten
willst, würde ich eine Datei "D:\Artikel.pre" mit dem Inhalt
^H......;;H
> ^S......;;S
> ^X......;;X
> ^Y......;;Y
> 
erstellen und etwa folgenden (ungetesteten) Code verwenden:
@echo off & setlocal
> set "Ordner=D:\Artikeldaten"  
> 
> pushd "%Ordner%"  
> for /f "delims=" %%i in ('dir /b/a-d *.txt') do findstr /g:"D:\Artikel.pre"  
> "%%i">"%%~ni_sauber.csv"  
> popd
> 

Sowas hatte ich zuerst auch überlegt, allerdings bin ich dafür zu blöd gewesen ;)
Ich muss die Dateien vorher allerdings eh sichten, da ist das kein Problem eben das Prefix anzupasssen - und dafür verstehe ich auch, was mein Script macht ;)

P.S.:
> beliebig viele Simikolons (oder Simikolonne? :D)
Eins von der Sorte ist jedenfalls sicher ein Semikolon ... face-wink
Wie recht du hast, wieso kann ich mir das einfach nicht merken? face-sad