Tabellen auslesen und Berechnungen durchführen (FOR F Schleife)
Hallo,
die Werte aus den u.a. Tabellen möchte ich mit Hilfe eines Batch auslesen, mit diesen Daten dann Berechnungen durchführen und das Ganze dann in einer Summe ausgeben.
Die Ausgangstabellen sehen, wie folgt aus:
Tabelle1:
007;DK1;08.04.14;20000;0;Muster
007;DK2;08.04.14;240;0;Muster
007;DK3;08.04.14;1620;0;Muster
Tabelle2:
DK3;60
DK2;80
DK1:100
Tabelle3:
DK0;85
Folgendes soll berechnet/verbunden werden:
Die Werte: 20000 (DK1), 220 (DK2) und 1620 (DK3) aus der Tabelle1 sollen zunächst jeweils durch die dazugehörigen Werte, also 100 (DK1), 80 (DK2) und 60 (DK3) aus Tabelle2 dividiert werden.
Also: 20000 / 100 = 200
240 / 80 = 3
1620 / 60 = 27
Die Gesamtsumme wäre dann der Wert 230.
Die ermittelte Gesamtsumme soll dann wieder mit dem Wert 85 aus der Tabelle3 multipliziert (also 220 * 85 = 19550) und anschließend wie folgt in einer Datei ausgegeben werden:
007;DK0;08.04.14;19550;0;Muster
Meinen Versuch habe, wie u.a. gestartet, bin aber an dem Einfügen der Rechenoperationen (mit set /a usw.) sowie der Einbindung von Tabelle2 und Tabelle3 in dieses Rechenwerk bisher leider gescheitert.
@echo off & setlocal
set lvs=tabelle1.txt
for /f "tokens=1,2,3,4,5 delims=;" %%a in (%lvs%) do (
if %%q==DK1 echo %%a;%%b;%%c;%%d/100;%%e
)
for /f "tokens=1,2,3,4 delims=;" %%i in (%lvs%) do (
if %%j==DK2 echo %%i;%%j;%%k;%%l/80;%%m
)
for /f "tokens=1,2,3,4 delims=;" %%p in (%lvs%) do (
if %%j==DK3 echo %%p;%%q;%%r;%%s/60;%%t
)
Ich weiß nicht, ob das überhaupt in dieser Form per Batch möglich ist und wäre für diesbezügliche Tipps sehr dankbar....
Gruß
Markus
die Werte aus den u.a. Tabellen möchte ich mit Hilfe eines Batch auslesen, mit diesen Daten dann Berechnungen durchführen und das Ganze dann in einer Summe ausgeben.
Die Ausgangstabellen sehen, wie folgt aus:
Tabelle1:
007;DK1;08.04.14;20000;0;Muster
007;DK2;08.04.14;240;0;Muster
007;DK3;08.04.14;1620;0;Muster
Tabelle2:
DK3;60
DK2;80
DK1:100
Tabelle3:
DK0;85
Folgendes soll berechnet/verbunden werden:
Die Werte: 20000 (DK1), 220 (DK2) und 1620 (DK3) aus der Tabelle1 sollen zunächst jeweils durch die dazugehörigen Werte, also 100 (DK1), 80 (DK2) und 60 (DK3) aus Tabelle2 dividiert werden.
Also: 20000 / 100 = 200
240 / 80 = 3
1620 / 60 = 27
Die Gesamtsumme wäre dann der Wert 230.
Die ermittelte Gesamtsumme soll dann wieder mit dem Wert 85 aus der Tabelle3 multipliziert (also 220 * 85 = 19550) und anschließend wie folgt in einer Datei ausgegeben werden:
007;DK0;08.04.14;19550;0;Muster
Meinen Versuch habe, wie u.a. gestartet, bin aber an dem Einfügen der Rechenoperationen (mit set /a usw.) sowie der Einbindung von Tabelle2 und Tabelle3 in dieses Rechenwerk bisher leider gescheitert.
@echo off & setlocal
set lvs=tabelle1.txt
for /f "tokens=1,2,3,4,5 delims=;" %%a in (%lvs%) do (
if %%q==DK1 echo %%a;%%b;%%c;%%d/100;%%e
)
for /f "tokens=1,2,3,4 delims=;" %%i in (%lvs%) do (
if %%j==DK2 echo %%i;%%j;%%k;%%l/80;%%m
)
for /f "tokens=1,2,3,4 delims=;" %%p in (%lvs%) do (
if %%j==DK3 echo %%p;%%q;%%r;%%s/60;%%t
)
Ich weiß nicht, ob das überhaupt in dieser Form per Batch möglich ist und wäre für diesbezügliche Tipps sehr dankbar....
Gruß
Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235135
Url: https://administrator.de/contentid/235135
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Markus,
deine Frage ist so offensichtlich eine Übungs-/Testaufgabe das dich das Fehlen von Antworten nicht wundern sollte
Einige Anmerkungen:
Ansonsten geht das natürlich mit Batch (ohne sich jetzt Gedanken über Plausibilitätskontrollen oder Fehlerabfragen zu machen)
Das Stichwort sind Variablen mit verzögerter Erweiterung = DelayedExpansion.
Diese Batchdatei verdeutlicht das Konzept:
Bei mir erzeugt das diese Ausgabe, Zeile 14 könnte mit IO-Redirection direkt in eine Datei augeben.
Gruß
LotPings
deine Frage ist so offensichtlich eine Übungs-/Testaufgabe das dich das Fehlen von Antworten nicht wundern sollte
Einige Anmerkungen:
- Batch ist keine Hochsprache, du kannst nicht an beliebigen Stellen Rechnen, das geht nur mit Set /A
- In der ersten Schleife wird %%q abgefragt, wo soll das herkommen?
- In der 2.Schleife nutzt du tokens=1,2,3,4 beginnend mit %%i - erwartest aber bei %%m einein Inhalt (das wäre aber token 5)
- Die Schreibweise tokens=1-5 wäre übringends einfacher.
- In der Tabelle2 steht hinter DK1 ein Doppelpunkt kein Semikolon.
Ansonsten geht das natürlich mit Batch (ohne sich jetzt Gedanken über Plausibilitätskontrollen oder Fehlerabfragen zu machen)
Das Stichwort sind Variablen mit verzögerter Erweiterung = DelayedExpansion.
Diese Batchdatei verdeutlicht das Konzept:
@echo off & setlocal EnableDelayedExpansion
if defined Ergebnis Set "Ergebnis="
:: Einlesen Tabelle2+3 in Variablen
for /f "tokens=1,2 delims=;" %%A in (Tabelle2.txt) Do Set "%%A=%%B"
for /f "tokens=1,2 delims=;" %%A in (Tabelle3.txt) Do Set "%%A=%%B"
:: Testausgabe
Set DK
:: Verarbeite Tabelle1
for /f "tokens=2,4 delims=;" %%A in (Tabelle1.txt) Do Call :calc %%B !%%A!
set /a Ergebnis*=%DK0%
Echo 007;DK0;08.04.14;%Ergebnis%;0;Muster
Pause
Exit /B
:Calc
Echo %1 / %2
Set /a Ergebnis+= %1 / %2
Bei mir erzeugt das diese Ausgabe, Zeile 14 könnte mit IO-Redirection direkt in eine Datei augeben.
DK0=85
DK1=100
DK2=80
DK3=60
20000 / 100
240 / 80
1620 / 60
007;DK0;08.04.14;19550;0;Muster
Drücken Sie eine beliebige Taste . . .
Gruß
LotPings
Hallo makroll10 und willkommen im Forum!
Nicht, dass sich das (auf Basis der von Dir dargestellten Struktur) nicht in Batch umsetzen ließe - etwa
- aber vermutlich ist Dein Beispiel noch nicht die ganze Wahrheit ...
Grüße
bastla
Nicht, dass sich das (auf Basis der von Dir dargestellten Struktur) nicht in Batch umsetzen ließe - etwa
@echo off & setlocal
set "T1=D:\Tabelle1.txt"
set "T2=:D\Tabelle2.txt"
set "T3=D:\Tabelle3.txt"
set "Erg=D:\Ergebnis.txt"
for /f "usebackq tokens=1-6 delims=;" %%a in ("%T1%") do (
set "Nr=%%a"
set "%%b=%%d"
set "Datum=%%c"
set "X=%%e"
set "Text=%%f"
)
for /f "tokens=1-2 delims==" %%a in ('set DK') do (
for /f "tokens=2 delims=;" %%i in ('findstr /b "%%a" "%T2%"') do set /a Summe+=%%b/%%i
)
for /f "usebackq tokens=1-2 delims=;" %%a in ("%T3%") do (
set "K=%%a
set "M=%%b"
)
set /a Gesamt=Summe*M
>"%Erg%" echo %Nr%;%K%;%Datum%;%Gesamt%;%X%;%Text%
Grüße
bastla