Top-Themen

Aktuelle Themen (A bis Z)

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
GELÖST

Tabellen auslesen und Berechnungen durchführen (FOR F Schleife)

Frage Entwicklung Batch & Shell

Mitglied: makroll10

makroll10 (Level 1) - Jetzt verbinden

10.04.2014, aktualisiert 12.04.2014, 1315 Aufrufe, 3 Kommentare

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
Mitglied: LotPings
LÖSUNG 10.04.2014, aktualisiert 14.04.2014
Hallo Markus,
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:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
if defined Ergebnis Set "Ergebnis=" 
03.
 
04.
:: Einlesen Tabelle2+3 in Variablen 
05.
for /f "tokens=1,2 delims=;" %%A in (Tabelle2.txt) Do Set "%%A=%%B" 
06.
for /f "tokens=1,2 delims=;" %%A in (Tabelle3.txt) Do Set "%%A=%%B" 
07.
:: Testausgabe 
08.
Set DK 
09.
 
10.
:: Verarbeite Tabelle1 
11.
for /f "tokens=2,4 delims=;" %%A in (Tabelle1.txt) Do Call :calc %%B !%%A! 
12.
 
13.
set /a Ergebnis*=%DK0% 
14.
Echo 007;DK0;08.04.14;%Ergebnis%;0;Muster 
15.
 
16.
Pause 
17.
Exit /B 
18.
 
19.
:Calc 
20.
Echo %1 / %2 
21.
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
Bitte warten ..
Mitglied: bastla
LÖSUNG 10.04.2014, aktualisiert 12.04.2014
Hallo makroll10 und willkommen im Forum!

Nicht, dass sich das (auf Basis der von Dir dargestellten Struktur) nicht in Batch umsetzen ließe - etwa
01.
@echo off & setlocal 
02.
set "T1=D:\Tabelle1.txt" 
03.
set "T2=:D\Tabelle2.txt" 
04.
set "T3=D:\Tabelle3.txt" 
05.
set "Erg=D:\Ergebnis.txt" 
06.
 
07.
for /f "usebackq tokens=1-6 delims=;" %%a in ("%T1%") do ( 
08.
    set "Nr=%%a" 
09.
    set "%%b=%%d" 
10.
    set "Datum=%%c" 
11.
    set "X=%%e" 
12.
    set "Text=%%f" 
13.
14.
for /f "tokens=1-2 delims==" %%a in ('set DK') do ( 
15.
    for /f "tokens=2 delims=;" %%i in ('findstr /b "%%a" "%T2%"') do set /a Summe+=%%b/%%i 
16.
17.
for /f "usebackq tokens=1-2 delims=;" %%a in ("%T3%") do ( 
18.
    set "K=%%a 
19.
    set "M=%%b" 
20.
21.
set /a Gesamt=Summe*M 
22.
>"%Erg%" echo %Nr%;%K%;%Datum%;%Gesamt%;%X%;%Text%
- aber vermutlich ist Dein Beispiel noch nicht die ganze Wahrheit ...

Grüße
bastla
Bitte warten ..
Mitglied: makroll10
14.04.2014 um 10:30 Uhr
Hallo bastla, hallo LogPings,
ich stehe in Sachen "Batch-Programmierung" noch am Anfang und funktionierende "batch script's" sind da eine wirkliche Hilfe, um sich an dieses Thema weiter heranzutasten. Vielen Dank nochmal für die guten Beispiele. Gruß makroll10
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batchfile MSDOS - Berechnung in verschachtelter FOR-Schleife
gelöst Frage von KlimatorBatch & Shell3 Kommentare

Hallo zusammen, ich möchte in einer dreifach verschachtelten FOR-Schleife eine Berechnung auf Grundlage der drei hochgezählten Variablen vornehmen, doch ...

Datenbanken
Schleifen in SQL-Abfrage bei 2 Tabellen
gelöst Frage von AximandDatenbanken2 Kommentare

Hallo, ich hab mal wieder als totaler SQL-Anfänger ein Problemchen bei dem ich mir die Haare raufe. Ich habe ...

Batch & Shell
Dateinamen auslesen und in einer Schleife benutzen
gelöst Frage von TeholBeddictBatch & Shell12 Kommentare

Hallo Experten, ich kämpfe derzeit mit folgender Aufgabenstellung, welche ich per Batchskript lösen möchte: In einem Ordner sind 1 ...

Batch & Shell
For f Skip Schleife soll txt files kopieren
gelöst Frage von BiffBaffBatch & Shell2 Kommentare

Hallo zusammen, ich habe schon in anderen Foren gelesen, dass die FOR /F Variante keine Wildcards enthaelt. Ich wuerde ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 8 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 12 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 12 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 15 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server15 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...