Batch datei ausfiltern
Ich möchte eine Textdatei die von einen Programm exportiert wird speziell filtern, und die gefundenen werte in excel anzeigen.
Hallo
Einfache copy befehle o.ä. bekomme ich per batch hin, aber bei folgender Aufgabenstellung muss ich leider passen.
Vielleicht könnt ihr mir da bitte weiterhelfen!
Also die Datei sieht wie folgt aus:
0,0,1,1;10,1;21,Z;22,27.07.10;23,23:00:00;24,O;25,0;27,3;51,0;11,testkasse;12,100;18,1;19,192.168.2.10;2,16.08.2010;3,13:57;4,34;5,VCOM 6.94;6,T7.0.2.0-112;8,16;1001,1;1101,50/EUR;1201,1
2,1,1,CC:54/189/50
2,1,16,CC:2/7/50
2,1,911,CC:2/-7/50
2,2,1,CC:106/359.3/50
2,2,16,CC:2/7.5/50
2,2,911,CC:2/-7.5/50
2,3,1,CC:22/146.5/50
2,3,16,CC:1/50/50
2,3,911,CC:1/-50/50
2,4,1,CC:26/86.4/50
2,5,1,CC:264/626.1/50
2,5,16,CC:2/3.3/50
2,5,911,CC:2/-3.3/50
2,6,1,CC:1296/4642.9/50
2,6,16,CC:53/213.7/50
2,6,911,CC:53/-213.7/50
2,7,1,CC:775/2110.7/50
2,7,16,CC:446/1461.8/50
2,7,911,CC:446/-1461.8/50
2,8,1,CC:102/468.6/50
2,8,16,CC:5/12.9/50
2,8,911,CC:5/-12.9/50
2,9,1,CC:6/3960.6/50
2,9,16,CC:6/328.5/50
2,9,911,CC:6/-328.5/50
2,10,1,CC:201/674.5/50
2,11,1,CC:139/454.2/50
2,11,16,CC:1/4.1/50
2,11,911,CC:1/-4.1/50
2,15,1,CA:3952/0
2,15,16,CA:168/0
2,15,911,CA:168/0
0,0,1,1;10,1;21,Z;22,28.07.10;23,00:07:00;24,O;25,0;27,3;51,0;11,testkasse;12,100;18,1;19,192.168.2.10;2,16.08.2010;3,13:57;4,34;5,VCOM 6.94;6,T7.0.2.0-112;8,16
2,7,1,CC:113/384.2/50
Das ist ein Warengruppenbericht einer Registrierkasse
Die ersten 2 Zeilen ist die Header Info der jeweiligen Kasse
Wenn ich mir genau die dritte Zeile anschaue:
2,1,1,CC:54/189/50
Das 1,1 bedeuted das dass die erste Warengruppe mit den Endbetrag von 189€ gebucht worden ist
dann folgenden 2 Zeilen sind Storno Infos die keiner benötigt...
dann gehts weiter mit
2,2,1,CC:106/359.3/50
Das wäre jetzt also die 2te Warengruppe mit den Wert von 359.30
usw.
die Excel Datei sollte dann oder auch eine weitere Textdatei das ist egal...
sollte dann so aussehen
1;189
2;359.3
...
noch eine kleine besonderheit wo ich überhaupt nicht weiss wie mann das löst ist,
wie mann im Beispiel sieht das z.B. die Warengruppe 12 / 13 /14 nicht gebucht wurde!
das aber z.B am nächsten Tag der Fall sein könnte.
Ich hoffe ich konnte das ganze halbweg verständlich rüberbringen und hoffe ihr könnt mir dabei helfen
besten Dank im Voraus
Hallo
Einfache copy befehle o.ä. bekomme ich per batch hin, aber bei folgender Aufgabenstellung muss ich leider passen.
Vielleicht könnt ihr mir da bitte weiterhelfen!
Also die Datei sieht wie folgt aus:
0,0,1,1;10,1;21,Z;22,27.07.10;23,23:00:00;24,O;25,0;27,3;51,0;11,testkasse;12,100;18,1;19,192.168.2.10;2,16.08.2010;3,13:57;4,34;5,VCOM 6.94;6,T7.0.2.0-112;8,16;1001,1;1101,50/EUR;1201,1
2,1,1,CC:54/189/50
2,1,16,CC:2/7/50
2,1,911,CC:2/-7/50
2,2,1,CC:106/359.3/50
2,2,16,CC:2/7.5/50
2,2,911,CC:2/-7.5/50
2,3,1,CC:22/146.5/50
2,3,16,CC:1/50/50
2,3,911,CC:1/-50/50
2,4,1,CC:26/86.4/50
2,5,1,CC:264/626.1/50
2,5,16,CC:2/3.3/50
2,5,911,CC:2/-3.3/50
2,6,1,CC:1296/4642.9/50
2,6,16,CC:53/213.7/50
2,6,911,CC:53/-213.7/50
2,7,1,CC:775/2110.7/50
2,7,16,CC:446/1461.8/50
2,7,911,CC:446/-1461.8/50
2,8,1,CC:102/468.6/50
2,8,16,CC:5/12.9/50
2,8,911,CC:5/-12.9/50
2,9,1,CC:6/3960.6/50
2,9,16,CC:6/328.5/50
2,9,911,CC:6/-328.5/50
2,10,1,CC:201/674.5/50
2,11,1,CC:139/454.2/50
2,11,16,CC:1/4.1/50
2,11,911,CC:1/-4.1/50
2,15,1,CA:3952/0
2,15,16,CA:168/0
2,15,911,CA:168/0
0,0,1,1;10,1;21,Z;22,28.07.10;23,00:07:00;24,O;25,0;27,3;51,0;11,testkasse;12,100;18,1;19,192.168.2.10;2,16.08.2010;3,13:57;4,34;5,VCOM 6.94;6,T7.0.2.0-112;8,16
2,7,1,CC:113/384.2/50
Das ist ein Warengruppenbericht einer Registrierkasse
Die ersten 2 Zeilen ist die Header Info der jeweiligen Kasse
Wenn ich mir genau die dritte Zeile anschaue:
2,1,1,CC:54/189/50
Das 1,1 bedeuted das dass die erste Warengruppe mit den Endbetrag von 189€ gebucht worden ist
dann folgenden 2 Zeilen sind Storno Infos die keiner benötigt...
dann gehts weiter mit
2,2,1,CC:106/359.3/50
Das wäre jetzt also die 2te Warengruppe mit den Wert von 359.30
usw.
die Excel Datei sollte dann oder auch eine weitere Textdatei das ist egal...
sollte dann so aussehen
1;189
2;359.3
...
noch eine kleine besonderheit wo ich überhaupt nicht weiss wie mann das löst ist,
wie mann im Beispiel sieht das z.B. die Warengruppe 12 / 13 /14 nicht gebucht wurde!
das aber z.B am nächsten Tag der Fall sein könnte.
Ich hoffe ich konnte das ganze halbweg verständlich rüberbringen und hoffe ihr könnt mir dabei helfen
besten Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149109
Url: https://administrator.de/forum/batch-datei-ausfiltern-149109.html
Ausgedruckt am: 29.04.2025 um 19:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo berni3487 und willkommen im Forum!
Im einfachsten Fall wäre das eine Zeile (zum Testen direkt in der CMD-Shell, Daten werden aus der Datei "Kasse.txt" gelesen):
Eine CSV-Datei wird daraus, wenn am Ende noch zB "
In dieser Minimalvariante werden einfach die jeweiligen Tages-Header (besteht allerdings lt Deinem Beispiel nur aus 1 Zeile) herausgefiltert (wie anderenfalls damit umgegangen werden sollte, hast Du noch nicht erklärt) und die beiden relevanten Felder Nr 2 und 5 ausgegeben ...
Grüße
bastla
Im einfachsten Fall wäre das eine Zeile (zum Testen direkt in der CMD-Shell, Daten werden aus der Datei "Kasse.txt" gelesen):
for /f "tokens=2,5 delims=,/" %i in ('findstr /v "testkasse" "Kasse.txt"') do @echo %i;%j
>>Kasse.csv
" angefügt wird.In dieser Minimalvariante werden einfach die jeweiligen Tages-Header (besteht allerdings lt Deinem Beispiel nur aus 1 Zeile) herausgefiltert (wie anderenfalls damit umgegangen werden sollte, hast Du noch nicht erklärt) und die beiden relevanten Felder Nr 2 und 5 ausgegeben ...
Grüße
bastla
Moin bernie3487,
ausgesuchte Teile deines Konzepts sind völlig einleuchtend und fast schon selbsterklärend.
Aber zu kleineren Nebenschauplätzen habe ich Nachfragen.
Ist denn wirklich der große Plan, dass du jeden Tag wieder eine Detailbuchungen-Datei auf ein paar spärliche Summenzeilen zusammendampfst und dafür jeden Tag wieder eine neue Text/Csv/Excel-datei erzeugst?
Wenn ja... hat der Input ( bei dir vorsichtig mit "die Datei" umschrieben) eine Namenskonvention, z.B. die heissen Immer "FromSaschaWithLove.txt" oder Umsatz20100816.csv"?
Sollen neu erzeugte Dateien auch irgendwie heissen oder soll ein Zufallswert als Vorname dienen? (Wenn Zufallswert: reicht es 5stellig oder sind 128 Stellen sinnvoller?)
Oder soll alles (bzw. alles pro Woche, alles pro Monat,...) in EINE Excel-Tabelle und jeweils in eine Spalte?
Was soll dann weiter mit den Daten passieren - gehen die paar Umsatz-Ergebniszahlen direkt bei der Cheffin aufs iPhone oder liegen die erstmal einfach so da?
WoherTF soll irgendwer/irgendwas "wissen" oder "erkennen", für welche Warengruppen heute keine Buchungen da sind, aber morgen vielleicht?
Vielleicht wird ja Artikelgruppe Fisch nur Donnerstags & Freitags verkauft und Weihnachtsbäume fast das ganze Jahr nicht... aber Ende des Jahres wie doll.
Wissen selbst die 5 Wirtschaftsweisen nicht so genau - wie soll ein mickriger Batch das vorausahnen?
Bitte tritt erst noch mal einen Schritt zurück, bevor wir uns mit der Uhrmacherlupe über einzelne Token-Zerlegungen beugen und skizzier mal den Prozess.
["Die Daten fallen unerwartet jeden Tag außer Sonntag ind das Verzeichnis XZ, haben den Namen ...bla... und am Ende der Reise sollen die Tages-/Wochen-/Monatsdaten..weitergehen an ...ABC... .., weil damit ...sülzdibülz... getätigt werden muss..."]
Grüße
Biber
ausgesuchte Teile deines Konzepts sind völlig einleuchtend und fast schon selbsterklärend.
Aber zu kleineren Nebenschauplätzen habe ich Nachfragen.
aber bei folgender Aufgabenstellung muss ich leider passen.
Was genau meinst du mit "Aufgabenstellung"?Ist denn wirklich der große Plan, dass du jeden Tag wieder eine Detailbuchungen-Datei auf ein paar spärliche Summenzeilen zusammendampfst und dafür jeden Tag wieder eine neue Text/Csv/Excel-datei erzeugst?
Wenn ja... hat der Input ( bei dir vorsichtig mit "die Datei" umschrieben) eine Namenskonvention, z.B. die heissen Immer "FromSaschaWithLove.txt" oder Umsatz20100816.csv"?
Sollen neu erzeugte Dateien auch irgendwie heissen oder soll ein Zufallswert als Vorname dienen? (Wenn Zufallswert: reicht es 5stellig oder sind 128 Stellen sinnvoller?)
Oder soll alles (bzw. alles pro Woche, alles pro Monat,...) in EINE Excel-Tabelle und jeweils in eine Spalte?
Was soll dann weiter mit den Daten passieren - gehen die paar Umsatz-Ergebniszahlen direkt bei der Cheffin aufs iPhone oder liegen die erstmal einfach so da?
WoherTF soll irgendwer/irgendwas "wissen" oder "erkennen", für welche Warengruppen heute keine Buchungen da sind, aber morgen vielleicht?
Vielleicht wird ja Artikelgruppe Fisch nur Donnerstags & Freitags verkauft und Weihnachtsbäume fast das ganze Jahr nicht... aber Ende des Jahres wie doll.
Wissen selbst die 5 Wirtschaftsweisen nicht so genau - wie soll ein mickriger Batch das vorausahnen?
Bitte tritt erst noch mal einen Schritt zurück, bevor wir uns mit der Uhrmacherlupe über einzelne Token-Zerlegungen beugen und skizzier mal den Prozess.
["Die Daten fallen unerwartet jeden Tag außer Sonntag ind das Verzeichnis XZ, haben den Namen ...bla... und am Ende der Reise sollen die Tages-/Wochen-/Monatsdaten..weitergehen an ...ABC... .., weil damit ...sülzdibülz... getätigt werden muss..."]
Grüße
Biber
Hallo berni3487!
Falls Du Dich auf die Struktur der Textdatei wie oben dargestellt verlassen kannst, dann etwa so:
Ich habe unterstellt, dass Ausgangsdatei und Ergebnisse im Ordner "D:\Kassendaten" gespeichert sind/werden sollen, und dass es in diesem Ordner keine erhaltenswerten ".csv"-Dateien gibt (und daher vorweg alle ev noch vom vorigen Monat vorhandenen Dateien gelöscht werden können).
Grüße
bastla
ich müsste also alle Warengruppen nochmals addieren
Das müsstest Du doch in Excel hinbekommen - Stichwort "SUMMEWENN()
" (Rechnen mit Dezimalzahlen ist keine echte Stärke von Batch) ...Und könnten wir mehrere Kassen auch ausfiltern?
Und wäre es nicht sinnvoller, vorweg schon zu verhindern, dass die Daten aller Kassen in einer einzigen Datei landen?Falls Du Dich auf die Struktur der Textdatei wie oben dargestellt verlassen kannst, dann etwa so:
@echo off & setlocal
pushd "D:\Kassendaten"
set "Ein=Kasse.txt"
del *.csv 2>nul
set "Aus="
for /f "tokens=2,5,22 delims=,;/" %%i in ('findstr /v ",16, ,911," "%Ein%"') do if "%%k" neq "" (set "Aus=%%k.csv") else (call :ProcessLine "%%i" "%%j")
popd
goto :eof
:ProcessLine
>>"%Aus%" echo %~1;%~2
goto :eof
Grüße
bastla