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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58791
Url: https://administrator.de/contentid/58791
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
15 Kommentare
Neuester Kommentar
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
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
Moin ManneKL,
in diesem Fall entweder mit einem Oneliner am CMD-Prompt oder als Batch:
[...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]
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]
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:
Für den Fall 2 könnte man ähnlich vorgehen:
Achten müsstest Du noch auch die Schreibweise des Umlautes - im Fall des Falles die Batchdatei zB als "Aufsummieren.bat" speichern und nochmals mit
ö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 ... [/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]
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%"
@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%"
edit Aufsummieren.bat
Grüße
bastla
[Edit] @Biber: Solltest Du nicht schon im Wochenende sein ... [/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]
@Biber
Grüße
bastla
...ich hab noch einen Batchjob laufen, der sollte eigentlich am Ende ein "echo Feierabend" ausführen...
Bist Du sicher, dass dahinter kein >nul steht? Grüße
bastla
<grins> @bastla
...also in der Tat mit ">nul" dahinter....
Nu' aber ab ins Wochenende...
Liebe & letzte Grüße
Biber
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
Hallo ManneKL!
Zur Umlautproblematik: Je nach Herkunft der Daten können Textdateien ua nach ASCII oder ANSI codiert sein. Wenn
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
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
... 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
chcp 1252
Ist andererseits das "ä" im Windows-Editor richtig zu lesen, kannst Du den geposteten Code ebenfalls einfach über den Windows-Editor abspeichern.
Grüße
bastla
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:
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
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
Hallo ManneKL!
Sollte so gehen:
In dieser Fassung ist Biber's "ASCII/ANSI-Codierung is mir schnuppe"-Variante integriert ...
Grüße
bastla
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%"
Grüße
bastla