apop85
Goto Top

Einheiten-Umrechner (Eingabe von set p auf zwei Zeichen beschränken und Resultat Drucken)

Hallo zusammen

Ich arbeite gerade an einem kleinen Behelfstool für die Firma nun habe ich einen kleinen Rechner geschrieben welcher mcg/l in nmol/l umrechnet. Mein Problem ist jedoch, da cmd leider keine Kommastellen berechnen kann und ich diese mit Hilfe von Multiplikationen und Substraktionen ermittle, muss die Eingabe der Nachkommastelle immer aus zwei Zahlen bestehen.
Das Resultat das ausgegeben wird würde ich dann gerne Ausdrucken.

Update:07.04.13

Wie kann ich dies Definieren, dass die Eingabe einer Variable
1. nicht weniger oder mehr als Zwei Zahlen beinhalten darf und
2. dass die Eingabe aus Zahlen bestehen MUSS
3. Das Resultat gedruckt wird --> siehe Update


Hier der Ausschnitt des Scripts um den es geht

echo off
goto EINGABE

:EINGABE 
echo Enter Username 
set /p UserName=
set minum=%UserName:~3,1% 
set maximum=%UserName:~4,1% 
IF "%maximum%" EQU "" (   
IF "%minum%" NEQ "" (   
GOTO GENAU 
) ELSE ( 
echo zu wenig Zeichen 
echo. 
GOTO EINGABE 
) 
) ELSE ( 
echo zu viele Zeichen 
echo. 
GOTO EINGABE 
) 

:GENAU 
echo genau 4 Zeichen 
PAUSE 

Bei diesem Script erhalte ich aber jedes mal "Zu viele Zeichen" egal was ich eingebe.
Wie ich die Eingabe auf Zahlen beschränken kann habe ich noch nicht herausgefunden...

Hier noch im Zusammenhang mit dem Rechner:

:CALC2
cls
echo - - - - - - - - - - - - - - - - - - %DATE% - %TIME% - - - - - - - - - - - - - - - - -
echo                                           Version 1.0b
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Umrechnung von mcg/l zu nmol/l
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo Name des Stoffes
set /p name=
echo.
echo Eingabe in mcg/l Vor dem Komma (z.B. bei 1.50 wäre es 1)
set /p mcg=
echo.
echo Eingabe in mcg/l nach dem Komma (z.B. bei 1.50 wäre es 50)
set /p mcgnk=
echo.
echo Ihre Eingabe lautet %mcg%.%mcgnk% mcg/l
echo J/N
set /p choice=

if %choice% == j goto RECHNUNG
if %choice% == J goto RECHNUNG
if %choice% == n goto CALC2
if %choice% == N goto CALC2
goto CALC2

:RECHNUNG
cls
echo - - - - - - - - - - - - - - - - - - %DATE% - %TIME% - - - - - - - - - - - - - - - - -
echo                                           Version 1.0b
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Umrechnung von mcg/l zu nmol/l
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo Erste Eingabe: %mcg%.%mcgnk% mcg/l
echo.
echo Eingabe der Molaren Masse in g/mol vor dem Komma
set /p gmol=
echo.
echo Eingabe der Molaren Masse in g/mol nach dem Komma
set /p gmolnk=

rem --------------------PROBLEM------------------------

set minum=%gmolnk:~2,1% 
set maximum=%gmolnk:~2,1% 
IF "%maximum%" EQU "" (   
IF "%minum%" NEQ "" (   
goto WEITER0
) ELSE ( 
echo zu wenig Zeichen 
ping -n 2 localhost >NUL
echo. 
GOTO RECHNUNG 
) 
) ELSE ( 
echo zu viele Zeichen 
ping -n 3 localhost >NUL 
echo. 
GOTO RECHNUNG 
)

rem --------------------PROBLEM------------------------

:WEITER0
echo.
echo Ihre Eingabe lautet %gmol%.%gmolnk% g/mol
echo J/N
set /p choice=

if %choice% == j goto RECHNUNG2
if %choice% == J goto RECHNUNG2
if %choice% == n goto RECHNUNG
if %choice% == N goto RECHNUNG
goto RECHNUNG

:RECHNUNG2
set /a mal0="100000"  
set /a mal1="10000000"  
set /a mal2="100"  
set /a prod0=%mcg%*%mal1%
set /a prod1=%mcgnk%*%mal0%
set /a prod2=%prod0%+%prod1%
set /a prod3=%gmol%*%mal2%
set /a prod4=%gmolnk%*"1"  
set /a prod5=%prod3%+%prod4%
set /a prom0=%prod5%/%mal0%
set /a div0=%prod2%/%prod5%
set /a dif0=%div0%/"100"  
set /a dif1=%dif0%*"100"  
set /a nk0=%div0%-%dif1%


cls
echo - - - - - - - - - - - - - - - - - - %DATE% - %TIME% - - - - - - - - - - - - - - - - -
echo                                           Version 1.0b
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Umrechnung von mcg/l zu nmol/l
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo Stoffname: %name%
echo.
echo.
echo.
echo      %mcg%.%mcgnk% mcg/l
echo ------------------ x 1000 = %dif0%.%nk0% nmol/l
echo      %gmol%.%gmolnk% g/mol
echo.
echo.
echo.
echo.
echo.
echo 0 für Zurück 1 für erneute Berechnung

set /p choice=

if %choice% == 0 goto TOOLS
if %choice% == 1 goto CALC1
if %choice% == z goto ZS

Habe die Überprüfung bisher nur bei der Variable gmolnk integriert aber wie gesagt noch ohne Erfolg

Was ich noch gerne möchte ist, dass man am Schluss bei der Ausgabe der Formel mit Resultat den Fensterinhalt ausdrucken kann. Leider habe ich den entsprechenden Befehl für diese Funktion noch nicht gefunden.

Würde mich über eure Hilfe Freuen.

Danke

P.S.
Wahrscheinlich habe ich zu viele Rechenschritte drin, ich hab diesen Abschnitt Morgens um 4Uhr mittels Try & Error geschrieben und die Errors können durchaus noch vorhanden sein ;)
UPDATE 07.04.13
Was das Drucken anbelangt habe ich jetzt angefangen das Resultat mittels folgenden Code auszugeben
blabla >>\\server\ordner\resultat.txt
Was ich noch benötige ist, dass das file bei jeder neuer Berechnung geleert wird um einen sauberen Ausdruck zu erhalten.
Eine überlegung wäre wenn ich das txt file vor jeder neuen Berechnung lösche und neu erstelle. Mir wäre es jedoch lieber wenn es ohne löschen gehn würde

Content-Key: 204533

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: Apop85
Apop85 Apr 08, 2013 updated at 03:44:31 (UTC)
Goto Top
Also hab mich jetzt entschieden die Rechnung auf eine HTML zu exportieren da ich dort die Seitenformatierung besser einstellen kann.

Das ganze sieht jetzt wie folgt aus:
:PRINT2
set nname=ka
cls
echo - - - - - - - - - - - - - - - - - - %DATE% - %TIME% - - - - - - - - - - - - - - - - -
echo                                           Version 1.0b
echo ________________________________________________________________________________________________
echo __________________________________RAFFIS_____LITTLE_____HELPER__________________________________
echo.
echo                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo                                  Umrechnung von mcg/l zu mmol/l
echo                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo                                          Ihr Visum:
echo                                       x zum Abbrechen
set /p nname=                                         
if %nname% == ka goto PRINT2
uf %nname% == x goto RECHNUNG5
echo.
echo                                      Wird vorbereitet...

del druck.html /q/f & ping -n 2 localhost >NUL
copy NUL druck.html >NUL
 
>>druck.html echo ^<html^> 
>>druck.html echo ^<head^>
>>druck.html echo ^<title^>Umrechnung %name% von mcg/l zu mmol/l^</title^>
>>druck.html echo ^</head^>
>>druck.html echo ^<a align="center" style="text-align:center"^>  
>>druck.html echo ^<h1 align="center" style="padding:0px;margin:0px"^>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^</h1^>  
>>druck.html echo ^<h1 align="center" style="padding:0px;margin:0px"^>Umrechnung von mcg/l zu nmol/l^</h1^>  
>>druck.html echo ^<h1 align="center" style="padding:0px;margin:0px"^>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^</h1^>  
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<p style="text-align:center"^>Stoffname: %name%^<br^>^</p^>  
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<h4 style="text-align:center"^>%mcg%.%mcgnk% mcg/l ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^</h4^>  
>>druck.html echo ^<h4 style="text-align:center"^>----------------------------- x 1000 = %dif0%.%nk0% nmol/l^</h4^>  
>>druck.html echo ^<h4 style="text-align:center"^>%gmol%.%gmolnk% g/mol ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^&nbsp; ^</h4^>  
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<br^>
>>druck.html echo ^<p style="text-align:center"^>Datum: %DATE% ^&nbsp; ^&nbsp; Benutzer: %nname% ^&nbsp; ^&nbsp; Visum:.....................^<br^>^</p^>  

>>druck.html echo ^<p style="padding:0px;margin:0px"^>  
>>druck.html echo ^<p style="text-align:center padding:0px;margin:0px"^>FIRMA^</p^>  
>>druck.html echo ^<p style="text-align:center padding:0px;margin:0px"^>ANSCHRIFT^</p^>  
>>druck.html echo ^<p style="text-align:center padding:0px;margin:0px"^>FIRMENSITZ^<br^>^</p^>  
>>druck.html echo ^</p^>^</body^>^</html^>

echo                                   Drucker auswählen (s für Standart)
set /p print=
goto RECHNUNG5

Aus diesem Vorgang wird dann eine html mit folgendem Inhalt erstellt:
<html> 
<head>
<title>Umrechnung  von mcg/l zu mmol/l</title>
</head>
<a align="center" style="text-align:center">  
<h1 align="center" style="padding:0px;margin:0px">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</h1>  
<h1 align="center" style="padding:0px;margin:0px">Umrechnung von mcg/l zu nmol/l</h1>  
<h1 align="center" style="padding:0px;margin:0px">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</h1>  
<br>
<br>
<p style="text-align:center">Stoffname: Beispiel<br></p>  
<br>
<br>
<br>
<h4 style="text-align:center">123.23 mcg/l &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </h4>  
<h4 style="text-align:center">----------------------------- x 1000 = 1000.0 nmol/l</h4>  
<h4 style="text-align:center">123.23 g/mol &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </h4>  
<br>
<br>
<br>
<br>
<br>
<p style="text-align:center">Datum: 08.04.2013 &nbsp; &nbsp; Benutzer:  &nbsp; &nbsp; Visum:.....................<br></p>  
<p style="padding:0px;margin:0px">  
<p style="text-align:center padding:0px;margin:0px">FIRMA</p>  
<p style="text-align:center padding:0px;margin:0px">ANSCHRIFT</p>  
<p style="text-align:center padding:0px;margin:0px">FIRMENSITZ<br></p>  
</p></body></html>

Jetzt fehlt noch das automatische Drucken auf dem ausgewählten Drucker. Die einzelnen Druckeradressen kann ich aber erst in zwei Wochen anschauen. Jetzt such ich erst mal etwas um es über den Standarddrucker auszudrucken.
Member: Apop85
Apop85 Apr 08, 2013 updated at 14:09:19 (UTC)
Goto Top
So hab jetzt eine gewisse eingrenzung fertig gebracht mit folgendem Code:
Problem ist jedoch wenn die Kommastelle folgendermassen eingegeben wird: 034. Dann erkennt er die Eingabe als 34. Das darf nicht sein... Da wäre ich sehr froh um einen Lösungsansatz.
if %gmolnk% LEQ 99 if %gmolnk% GEQ 10 goto WEITER0
if %gmolnk% LEQ 9 set /a gmolnk=%gmolnk%*10 & goto WEITER0
if %gmolnk% GEQ 100 set /a gmolnk=%gmolnk%/10
if %gmolnk% GEQ 100 set /a gmolnk=%gmolnk%/10
if %gmolnk% LEQ 99 if %gmolnk% GEQ 10 goto WEITER0

echo.
echo                                    Angabe immer auf zwei Kommastellen & ping -n 3 localhost >NUL
goto RECHNUNG

Ist zwar nicht was ich mir vorgestellt habe aber es funktioniert zumindest bis auf vier Kommastellen. Das ist das Maximum was in unserem Geschäft benötigt wird. Nur werden die Kommastellen nicht gerundet.

Jetzt bräuchte ich nur noch eine Lösung für das Problem, dass ich die Kommastelle seperat eingeben muss.
Member: Apop85
Apop85 Apr 09, 2013 updated at 13:04:26 (UTC)
Goto Top
Hab es jetzt noch mit IF probiert hinzukriegen. Funktioniert soweit ausser der Teil wo die Eingabe auf Buchstaben überprüft werden soll:

Hier mal ein Beispiel an dem ich grad bin:
@echo off & setlocal & chcp 1252
:1
set {{comment_strings:22430495990}} 
set {{comment_strings:11338751075}} 
set {{comment_strings:34015831334}} 
echo Nachkommastellen: 
set /p UserName=
cls

:2
set minum=%UserName:~0,1% 
set maximum=%UserName:~2,1% 
IF {{comment_strings:12648228179}} EQU {{comment_strings:43322759004}} (  
IF {{comment_strings:43813300464}} NEQ "" (   
GOTO 4
) ELSE ( 
echo Immer auf zwei Kommastellen angeben
goto 3
) 
) ELSE ( 
echo Max. 2 Kommastellen
echo. 
goto 3
) 

:3
echo FAIL
echo Minum: {{comment_strings:62792653694}} / Maximum: {{comment_strings:11709466351}} 
goto 1

:4
if %UserName:~1,1% LEQ 9 goto 5
if %UserName:~0,1% LEQ 9 goto 5
goto 6

:5
echo GREAT!
echo %Username%
echo %UserName:~0,1%%UserName:~1,1%
goto 1 

:6
echo NUR ZAHLEN & goto 3

Wenn ich Zeile 32 und 33 zusammenfasse und einfach sage username muss kleiner als 99 sein erkennt er Buchstaben nur bedingt. 1x erkennt er, x1 akzeptiert er jedoch. Mit dem Code von oben werden keine Buchstaben erkannt.
Wenn ich ein Leerzeichen eingebe und Bestätige stürzt es ab mit "9 ist synaktisch nicht verarbeitbar"... woher denn die 9? von username muss kleiner 9 sein?

Wie könnte man das bewerkstelligen? bzw. wo habe ich den Fehler gemacht?

habes auch schon versucht so einzugrenzen:
if "%UserName:~1,1%== " goto 6  
if "%UserName:~0,1%== " goto 6  
Dann stürzt es jedoch ab weil es goto nicht verarbeiten kann...

Danke für euere Hilfe...

P.s.
Gibt es einen Befehl um alle variablen zu löschen?
Member: Apop85
Apop85 Apr 11, 2013 at 20:36:59 (UTC)
Goto Top
Beide Probleme sind nun gelöst.

Die Ausgabe der Eingaben findet über eine HTML statt (Einfach zu formatieren) und für die Abfrage verwende ich folgendes Script:
for /f "delims=. tokens=1-2" %%a in ("%mcg%") do (  
				Set "mcg=%%a"  
				Set "mcgnk=%%b"  
)

if "%mcgnk%" == "" set /a mcgnk=%mcg%*1 & set mcg=0  
echo "%mcg%" "%mcgnk%"  
pause
if %mcgnk% GEQ 999 goto REWA2

echo "%mcg%" "%mcgnk%"  
if "%mcgnk:~2,3%" == "" if "%mcgnk:~1,4%" == "" set /a mcgnk=%mcgnk%*100 & goto EINGPRUE2  
if "%mcgnk:~2,3%" == "" set /a mcgnk=%mcgnk%*10 & goto EINGPRUE2  
if %mcgnk:~0,3% == 000 if %mcgnk% GEQ 1 goto REWA2
if %mcgnk:~0,2% == 00 if %mcgnk:~2,3% GEQ 9 goto REWA2 
if %mcgnk:~0,1% == 0 if %mcgnk:~1,4% GEQ 99 echo REWA2

Werde das Problem als Gelöst markieren.

Grüsse Apop