Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch datei ausfiltern

Frage Entwicklung Batch & Shell

Mitglied: berni3487

berni3487 (Level 1) - Jetzt verbinden

16.08.2010, aktualisiert 18:21 Uhr, 2954 Aufrufe, 8 Kommentare

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
Mitglied: bastla
16.08.2010 um 18:41 Uhr
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):
for /f "tokens=2,5 delims=,/" %i in ('findstr /v "testkasse" "Kasse.txt"') do @echo %i;%j
Eine CSV-Datei wird daraus, wenn am Ende noch zB ">>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
Bitte warten ..
Mitglied: Biber
16.08.2010 um 18:58 Uhr
Moin bernie3487,

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
Bitte warten ..
Mitglied: berni3487
16.08.2010 um 19:41 Uhr
Sorry ich versuch nochmal von Vorne:

Die Kasse wird täglich von einen speziellen Programm ausgelesen und die Warengruppenumsätze gespeichert.
Am Ende jeden Monats wird dann die gepostete Textdatei erstellt d.h das ganze wird monatlich gemacht!

Diese Textdatei hatt immer dieslebe Bezeichnung.

Der Name der neu erzeugten datei ist egal

Ergebnis sollte eine CSV Datei oder Excel Tabelle sein die die oben gewünschten Werte ausgibt, Spalte A Warengruppenummer Spalte B den Wert oder für CSV 1;189.

Diese Datei soll am PC irgendwo gespeichert werden!

Das mit den Vorausahnen :
Wenn z.B.: 13,1 nicht in der Export datei, dann eine Null ausgeben...
Bitte warten ..
Mitglied: berni3487
16.08.2010 um 20:16 Uhr
Zitat von bastla:
Hallo berni3487 und willkommen im Forum!>
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 ...

ja aber leider auch die nicht benötigten Zwischenzeilen,

(2,1,1,CC:54/189/50 danach kommt ja immer 1,16 und 1,911, 2;16 und 2;911...)

diese sollten nicht mitausgegeben werden

wenn das so erstmal funktioniert wäre das schon echt super!
Bitte warten ..
Mitglied: bastla
16.08.2010 um 20:21 Uhr
Hallo berni3487!

Dann erweitere die "Ausschlüsse" doch einfach:
for /f "tokens=2,5 delims=,/" %i in ('findstr /v ",16, ,911, testkasse" "Kasse.txt"') do @echo %i;%j
Grüße
bastla
Bitte warten ..
Mitglied: berni3487
16.08.2010 um 22:15 Uhr
Hab das ganze getestet echt perfekt genau so wie ich es haben wollte

Ich muss jedoch nochmal aus interesse fragen:

Normalerweise kommuliert das Programm die Einzelnen Tage hin und wieder kommt es aber dazu das die Lesung pro Tag in der TXT Datei stehen
ich müsste also alle Warengruppen nochmals addieren den laut unserer Testdatei Hab ich folgendes Ergebnis:

1;189
2;359.3
3;146.5
4;86.4
5;626.1
6;4642.9
7;2110.7 --> !!!
8;468.6
9;3960.6
10;674.5
11;454.2
15;0
7;384.2 -->!!!

Und könnten wir mehrere Kassen auch ausfiltern? und jeweils eine csv daraus machen? (Kasse1.csv, Kasse2.csv)
Denn im Header stett ja die Info der Kasse

ein Beispieldatei wäre wie folgt:

0,0,1,1;10,1;21,Z;22,27.07.10;23,23:00:00;24,O;25,0;27,3;51,1;11,Kasse1;12,100;18,1;19,192.168.2.10;2,16.08.2010;3,22:11;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,2;21,Z;22,27.07.10;23,23:00:00;24,O;25,0;27,2;51,1;11,Kasse2;18,2;19,.;2,16.08.2010;3,22:11;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:37/129.5/50
2,1,16,CC:1/3.5/50
2,1,911,CC:1/-3.5/50
2,2,1,CC:26/102.6/50
2,3,1,CC:5/34.4/50
2,4,1,CC:3/9.1/50
2,5,1,CC:172/459.4/50
2,6,1,CC:448/1590.8/50
2,6,16,CC:3/13.2/50
2,6,911,CC:3/-13.2/50
2,7,1,CC:105/214.2/50
2,7,16,CC:2/6.8/50
2,7,911,CC:2/-6.8/50
2,8,1,CC:55/249.4/50
2,8,16,CC:1/4.6/50
2,8,911,CC:1/-4.6/50
2,9,1,CC:2/515.3/50
2,10,1,CC:50/165/50
2,11,1,CC:39/123.3/50
2,15,1,CA:1200/0
2,15,16,CA:11/0
2,15,911,CA:11/0

Wenn ich das noch hinbekommen würde....
Bitte warten ..
Mitglied: bastla
16.08.2010 um 23:01 Uhr
Hallo berni3487!
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:
01.
@echo off & setlocal 
02.
pushd "D:\Kassendaten" 
03.
set "Ein=Kasse.txt" 
04.
 
05.
del *.csv 2>nul 
06.
set "Aus=" 
07.
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") 
08.
popd 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
>>"%Aus%" echo %~1;%~2 
13.
goto :eof
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
Bitte warten ..
Mitglied: berni3487
17.08.2010 um 10:47 Uhr
Habe das ganze getestet.
Ich muss noch jetzt ein bisserl mit Excel basteln dann ist es Perfekt!

Vielen Vielen Dank!
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom blockiert immer noch den Port 7547 in ihrem Netz

(3)

Erfahrungsbericht von joachim57 zum Thema DSL, VDSL ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...