mannekl
Goto Top

Gesamtsumme ermitteln

Gesamtsumme ermitteln

Hallo , Ihr Lieben,
brauche wieder mal Eure Hilfe.
Soll aus einer Text-Datei "2007-05-11-20.txt" die Anzahl der darin enthaltenen Gesamtkästen ermitten.Diese Zeiele Gesamtkästen sind mehrfach in dieser Datei enthalten.Anschließen in einer neuen Datei mit dem Datum schreiben.
Hier ein Beispiel:
Erstellt 11.05.2007 00:54:40
Nummer 20
Start 16.01.2007 14:44:07
Ende 11.05.2007 00:54:40
Gesamtkästen 89
Leergefache 10
Flaschen 122
Fremdflaschen 0

2....... - Kästen=1......., Flaschen=0......., Fremdfl=0......., Leer=0....... - (Sternburg 0,5)
29...... - Kästen=1......., Flaschen=0......., Fremdfl=0.......,
.
.
.
Gesamtkästen 89
.
.
.
Mein Skript, was noch nicht funktioniert:

@echo off

REM:Gesamtkästen summieren und auslesen für die Datei und dann neue Datei erstellen:

ECHO OFF

for /f %i in ('dir /b 2007-05-11-20.txt) do findstr /b /v "Gesamtkästen 89" %i >>%~ni.2007-05-11-20_neu.txt

Bitte um Eure Hilfe,
vielen Dank
Manne

Content-ID: 58791

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

Ausgedruckt am: 26.11.2024 um 07:11 Uhr

bastla
bastla 11.05.2007 um 14:20:31 Uhr
Goto Top
Hallo ManneKL!

Willst Du Anzahl der Zeilen mit dem Bestandteil "Gesamtkästen" finden oder tatsächlich die hinter "Gesamtkästen" stehenden Zahlen aufsummieren?

Steht der Text "Gesamtkästen" immer am Anfang einer Zeile (wie Dein Batch-Ansatz vermuten ließe) oder kann davor noch weiterer Text (zB ein "." wie in Deinem Beispiel) stehen?

Grüße
bastla
Iwan
Iwan 11.05.2007 um 14:34:40 Uhr
Goto Top
ich würde es mit einem Import nach Excel probieren
das geht sicherlich einfacher
ManneKL
ManneKL 11.05.2007 um 18:55:06 Uhr
Goto Top
Hallo bastla,
ja , es soll immer hinter Gesamtkästen die Zahl summiert werden und diese Gesamtkästen Zahl steht immer am Anfang der Zeile ohne ein anderes Zeichen (kein Text).
Gesamtkästen Zahl ist in der ganzen Datei mehrfach enthalten , an unterschiedlichen Zeilenanfängen.

gruß
Manne
Biber
Biber 11.05.2007 um 19:27:01 Uhr
Goto Top
Moin ManneKL,

in diesem Fall entweder mit einem Oneliner am CMD-Prompt oder als Batch:
@echo off & setlocal
for /f "tokens=2" %i in ('findstr /b "Gesamtkästen" 2007-05-11-20.txt') do @Set /a Summe+=%%i  
Echo Gesamtsumme %Summe% >>Gesamt2007-05-11-20.txt

[...als ungetesteter Anfang für EINE Datei.]

Gruss
Biber
[Edit] @bastla: zu: Solltest Du nicht schon im Wochenende sein ...?
...ich hab noch einen Batchjob laufen, der sollte eigentlich am Ende ein "echo Feierabend" ausführen...
[/Edit]
bastla
bastla 11.05.2007 um 19:29:07 Uhr
Goto Top
Hallo ManneKL!

Noch eine Frage zur neuen Datei: Soll diese alle Zeilen mit "Gesamtkästen" und die Summe enthalten, oder sollen alle anderen Zeilen (also ohne "Gesamtkästen") und abschließend die Summe hinein? [Edit] ... oder soll die Summe an die bestehende Datei angefügt werden - dann einfach Biber's Lösung verwenden ... [/Edit]

Im ersten Fall sähe der Code etwa so aus:
@echo off & setlocal
set "Quelle=D:\Ordner mit Daten\2007-05-11-20.txt"  
set "Ziel=D:\Ordner mit Daten\2007-05-11-20_neu.txt"  
set /a Summe=0
if exist "%Ziel%" del "%Ziel%"  
for /f "delims=" %%i in ('findstr /b /c:"Gesamtkästen" "%Quelle%"') do echo %%i>>"%Ziel%" & for /f "tokens=2" %%a in ('echo %%i') do set /a Summe+=%%a  
echo Summe: %Summe%>>"%Ziel%"  
Für den Fall 2 könnte man ähnlich vorgehen:
@echo off & setlocal
set "Quelle=D:\Ordner mit Daten\2007-05-11-20.txt"  
set "Ziel=D:\Ordner mit Daten\2007-05-11-20_neu.txt"  
set /a Summe=0
if exist "%Ziel%" del "%Ziel%"  
findstr /v /c:"Gesamtkästen" "%Quelle%">>"%Ziel%"  
for /f "delims=" %%i in ('findstr /b /c:"Gesamtkästen" "%Quelle%"') do for /f "tokens=2" %%a in ('echo %%i') do set /a Summe+=%%a  
echo Gesamtkästen %Summe%>>"%Ziel%"  
Achten müsstest Du noch auch die Schreibweise des Umlautes - im Fall des Falles die Batchdatei zB als "Aufsummieren.bat" speichern und nochmals mit
edit Aufsummieren.bat
öffnen, um das "ä" zu korrigieren. Beenden kannst Du den Editor mit Alt-d und b.

Grüße
bastla

[Edit] @Biber: Solltest Du nicht schon im Wochenende sein ... face-wink [/Edit]
[Edit2] Die Schreibweise der 2. Version ist als Abwandlung der 1. Variante entstanden - deshalb die umständliche Vorgangsweise mit zweimal "for" ... wie's schöner geht: siehe Version Biber[/Edit2]
bastla
bastla 11.05.2007 um 19:39:45 Uhr
Goto Top
@Biber
...ich hab noch einen Batchjob laufen, der sollte eigentlich am Ende ein "echo Feierabend" ausführen...
Bist Du sicher, dass dahinter kein >nul steht? face-wink

Grüße
bastla
Biber
Biber 11.05.2007 um 19:59:12 Uhr
Goto Top
<grins> @bastla
Bist Du sicher, dass dahinter kein >nul steht?
Doch, hinter beiden sogar, um ehrlich zu sein... das war mein Quick & Dirty-Test am CMD-Prompt:
(=19:22:11  E:\Schnipsel=)
>Set "Summe=" & (for /f "tokens=2" %i in ('findstr /b "Gesamtkästen" ManneKL.txt') do @Set /a "Summe+=%i">nul) && Set Summe  
Summe=3643

...also in der Tat mit ">nul" dahinter....

Nu' aber ab ins Wochenende...

Liebe & letzte Grüße
Biber
ManneKL
ManneKL 12.05.2007 um 08:04:02 Uhr
Goto Top
Hallo bastla und biber,

ja bastla, in der neuen Datei sollen alle Zeilen aus der Quelldatei(2007-05-11-20.txt) mit "Gesamtkästen XXX" in einer neuen Datei enthalten sein und wenn geht,dann diese Einzelzahlen der Gesamtkästen, als abschließende Gesamtsumme.
Was ich noch nicht kapiert habe,ist der Umlaut"ä"im Wort "Gesamtkästen".Kann das diese Programmsprache nicht interpretieren?und muß mann da eine Änderung in der Quelltatei mit Editor durch Ersetzen von "ä" in "ae" durchführen?

Ansonsten werd ich es erst Anfang der Woche Eure Skripte testen können.
Bis dahin, vielen Dank...
Manne
bastla
bastla 12.05.2007 um 08:30:59 Uhr
Goto Top
Hallo ManneKL!

... in der neuen Datei sollen alle Zeilen aus der Quelldatei(2007-05-11-20.txt) mit "Gesamtkästen XXX" ...
Dann versuch es mit meiner ersten Variante ...

Zur Umlautproblematik: Je nach Herkunft der Daten können Textdateien ua nach ASCII oder ANSI codiert sein. Wenn
type 2007-05-11-20.txt
ein richtig dargestelltes "ä" ausgibt, sind es ASCII-Daten und Du solltest die oben beschriebene "edit"-Methode verwenden. Als Alternative käme auch noch ein als zweite Zeile in den Batch eingefügtes
chcp 1252
in Frage.

Ist andererseits das "ä" im Windows-Editor richtig zu lesen, kannst Du den geposteten Code ebenfalls einfach über den Windows-Editor abspeichern.

Grüße
bastla
Biber
Biber 12.05.2007 um 12:02:02 Uhr
Goto Top
Hallo ManneKL,

lass Dich nicht verwirren von den ANSI/ASCII-Bierkästen - ist in Deinem Fall keine Komplikation.
Umlaute und andere Specials werden halt in diesen beiden Codepags unterschiedlich kodiert.
Nichtsdestotrotz bleibt ein "ä" oder "ü" oder "ß" jeweils ein Zeichen (wie auch immer dargestellt).

Also kannst Du mit dem gar nicht gebührend gelobten FindStr.exe, das seit ein paar Windowsversionen als Schmankerl dabei ist, auch eine Wildcard-Suche machen.

Beispiel zum Nachkaspern am CMD-Prompt (Einzutippende Zeilen beginnen mit ">"):
Suche nach den Strings "Schnellübersicht" in einem Text:
>findstr /?>findstr.txt
REM Die FindStr-Hilfe in einen Txt schreiben

REM Suche alle die Zeichenfolge "Ausdr"+ ein beliebiges Zeichen + "ck"  
>findstr /r "Ausdr.ck" findstr.txt  
  /R    Sucht nach der Zeichenfolge als regulärem Ausdruck.
Schnellübersicht regulärer Ausdrücke:
Informationen zu FINDSTR mit regulären Ausdrücken finden Sie im

REM Suche die Zeichenfolge "Ausdr"+ ein beliebiges Zeichen + "ck"+ ein beliebiges Zeichen +":" am Zeilenende  
>findstr /r "Ausdr.ck.:$" findstr.txt  
Schnellübersicht regulärer Ausdrücke:

REM Suche die Zeichenfolge "Ausdr"+ ein beliebiges Zeichen + "ck"+ "." am Zeilenende  
>findstr /r "Ausdr.ck\.$" findstr.txt  
  /R    Sucht nach der Zeichenfolge als regulärem Ausdruck.

REM Suche alle Strings "Schnell" + beliebiges Zeichen +"bersicht", die am Zeilenanfang stehen    
>findstr /r "^Schnell.bersicht" findstr.txt  
Schnellübersicht regulärer Ausdrücke:

In Deinem Fall also wäre der letzte Fall der merkenswerte:
findstr /r "^Bierk.sten" InDeinem.txt
---> der liefert Dir alle "Bierk?sten"-Zeilen.

Gruß
Biber
ManneKL
ManneKL 13.05.2007 um 17:10:29 Uhr
Goto Top
Hallo bastla+biber,
danke für die Ausführungen mit den Umlauten.
Habe aber noch eine Frage zu Euren Skripten(ungetestet).
Wie ermittelt man die Zeile "Gesamtkästen XXX" mit der jeweiligen Zeitangabe (Erstellt 11.05.2007 00:54:40)aus der Quelldatei(2007-05-11-20.txt).Die nächste Zeile-Zeitangabe "Erstellt 11.05.2007 02:30:04" folgt mit der "Gesamtkästen XXX" mehrmals in der Quelltatei ,wobei sich immer die Zeitangabe und die Anzahl der "Gesamtkästen" ändern.Im Ergebnis soll die neue Datei dann nur das Datum mit Zeit und der jeweiligen Zahl der "Gesamtkästen" enthalten wobei diese Angaben sich immer durch die unterschiedlichen Zeitangaben und "Gesamtkästen"unterscheiden und aufgeführt werden.Die Gesamtsumme würde ich dann in einer Datenbankabfrage (vorher Import der Daten) ermitteln.
vielleicht darf ich Euch dafür noch mal bemühen?
gruß
Manne
ManneKL
ManneKL 14.05.2007 um 08:55:40 Uhr
Goto Top
allo bastla+biber,

zur genaueren Erklärung meiner letzten Mail.In der neuen Datei (Fall 1 bastla) soll noch die jeweilige Zeitangabe daneben stehen, so ungefähr:
Gesamtkästen 89 Erstellt 11.05.2007 00:54:40
Gesamtkästen 145 Erstellt 11.05.2007 02:45:11
Gesamtkästen 156 Erstellt 11.05.2007 03:26:46

Mit den jeweiligen Zeitangaben kann ich dann bessere Auswertungen tätigen.
Ansonsten funktionieren die beiden Skripte hervorragend,tausend Dank nochmal.
Gruß
Manne
ManneKL
ManneKL 14.05.2007 um 16:58:19 Uhr
Goto Top
Hallo bastla,
könntest Du das Skript noch so umstricken, dass mann neben der "Gesamtkästen zahl noch jeweils das Datum mit der Uhrzeit steht "Ende 11.05.2007 00:45:40"?

@echo off & setlocal
set "Quelle=C:\LG\2007-05-13-20.txt"
set "Ziel=C:\LG\2007-05-13-20_neu.txt"
set /a Summe=0
if exist "%Ziel%" del "%Ziel%"
for /f "delims=" %%i in ('findstr /b /c:"Gesamtkästen" "%Quelle%"') do echo %%i>>"%Ziel%" & for /f "tokens=2" %%a in ('echo %%i') do set /a Summe+=%%a

Quelle:
Erstellt 11.05.2007 00:54:40
Nummer 20
Start 16.01.2007 14:44:07
Ende 11.05.2007 00:54:40
Gesamtkästen 89
Werte, bis zum nächsten Block.....

Danke
Manne
bastla
bastla 14.05.2007 um 18:31:33 Uhr
Goto Top
Hallo ManneKL!

Sollte so gehen:
@echo off & setlocal
set "Quelle=C:\LG\2007-05-13-20.txt"  
set "Ziel=C:\LG\2007-05-13-20_neu.txt"  
if exist "%Ziel%" del "%Ziel%"  
for /f "delims=" %%i in ('type "%Quelle%"') do call :ProcessLine "%%i"  
goto :eof
:ProcessLine
echo %~1|findstr /b /c:"Erstellt">nul && set "Erst=%~1"  
echo %~1|findstr /r "^Gesamtk.sten">nul && echo %~1 %Erst%>>"%Ziel%"  
In dieser Fassung ist Biber's "ASCII/ANSI-Codierung is mir schnuppe"-Variante integriert ...

Grüße
bastla
ManneKL
ManneKL 15.05.2007 um 12:21:12 Uhr
Goto Top
Hallo bastla,
Dein letztes Skript funktioniert , echt toll...
Vielen,vielen Dank für Eure uneigennützige Hilfe.

Groß
ManneKl