anmelder
Goto Top

Zahlen unter 10 in Variable sollen beliebig mit oder ohne 0 beginnen

Hallo,

Programmvariable enthält immer eine zweistellige Zahl. Zahlen unter 0 beginnen manchmal mit einer 0, manchmal nicht.

Der Code soll das prüfen und nach Bedarf vereinheitlichen. Manchmal läuft der Code durch aber meistens kommt die Fehlermeldung:

"0" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Wenn ich das 2 Mal hintereinander starte wird das richtige Ergebnis teilweise erst beim 2. Mal angezeigt.

Was ist hier falsch?


echo off
cls

SET Programmvariable=8


SET Prüfzahl=%Programmvariable%
CALL :0Anhängen
SET Programmvariable=%Prüfzahl%


ECHO Ausgabe %Programmvariable%


GOTO :Ende



:0Anhängen

IF %Prüfzahl% LSS 10 (

 SET strtmp=%Prüfzahl:~0,1%

 IF %strtmp% EQU 0 (
  REM Zahl enthält bereits 0 am Anfang
 ) ELSE (
  REM Zahl muß mit 0 beginnen
  SET Prüfzahl=0%Prüfzahl%
 )
)

SET strtmp=

GOTO :EOF





:0Entfernen
set str=
IF %Prüfzahl% LSS 10 (
 SET str=%Prüfzahl:~0,1%
 IF %str% EQU 0 (
  REM Zahl soll nicht mit 0 beginnen
  SET Prüfzahl=%Prüfzahl:~1,1%
 ) ELSE (
  REM Zahl enthält keine 0 am Anfang
 )
)

SET strtmp=

GOTO :EOF



:Ende
pause

Content-Key: 385993

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

Printed on: April 23, 2024 at 13:04 o'clock

Member: Friemler
Friemler Sep 10, 2018 updated at 07:33:25 (UTC)
Goto Top
Hallo,

zunächst mal ist es eine schlechte Idee, Variablennamen oder Sprungmarken so zu benennen, dass sie deutsche Umlaute enthalten.

Eine weitere Sache, die Probleme macht, ist die interne Verwendung von Zahlen, die mit einer 0 beginnen. Solche Zahlen werden vom Script-Interpreter als Oktalzahlen aufgefasst. Das Oktal-Zahlensystem hat die Basis 8, Zahlen wie 8, 9, 18, 19, usw. gibt es dort nicht, ihre Verarbeitung in Vergleichsbefehlen führt zu Fehlermeldungen und Script-Abbruch. Besser ist es, intern mit Zahlen ohne führende Nullen zu arbeiten und die Nullen erst anzufügen, wenn die Zahl z.B. ausgegeben oder zur Erzeugung eines Dateinamens benutzt wird.

Um zu verhindern, dass vom Benutzer mit führenden Nullen eingegebene Zahlen im weiteren Script-Verlauf Probleme machen, können führende Nullen folgendermaßen aus der Eingabe herausgefiltert werden:
::Variable löschen
set "Eingabe="  

::Benutzereingabe lesen
set /p "Eingabe=Zahl eingeben: "  

::Führende Nullen entfernen
for /f "tokens=1* delims=0" %%a in ("%Eingabe%") do set "Eingabe=%%b"  

::Eingabe in Zahl umwandeln
::aus ENTER wird 0
::aus z.B. a23 wird 0
::aus z.B. 2a3 wird 2
set /a Eingabe=Eingabe


Um die Zahl zweistellig mit führender 0 in einen Dateinamen einzubauen kann man folgendes machen:
set "Index=0%Eingabe%"
set "Dateiname=Datei_%Index:~-2%.txt"


Grüße
Friemler
Mitglied: 137084
Solution 137084 Sep 10, 2018 updated at 07:40:03 (UTC)
Goto Top
Dafür braucht es eigentlich nur folgendes Konstrukt
@echo off
set "ProgrammVariable=8"  
set "ergebnis=0%ProgrammVariable%"  
set "ergebnis=%ergebnis:~-2%"  
echo %ergebnis%
Und schon hast du ein Ergebnis das immer 2 Ziffern enthält, egal ob du nun in der ProgrammVariable eine einstellige oder eine Zahl mit führender 0 stehen hast.
Du fügst also als Zwischenschritt eine 0 zur Variablen hinzu und nimmst im Anschluss immer nur die zwei Ziffern am Ende der neuen Variablen.
Member: anmelder
anmelder Sep 11, 2018 at 14:29:26 (UTC)
Goto Top
Danke euch beiden. Das zweite Beispiel ist das einfachste.