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?
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 385993
Url: https://administrator.de/contentid/385993
Ausgedruckt am: 23.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
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:
Um die Zahl zweistellig mit führender 0 in einen Dateinamen einzubauen kann man folgendes machen:
Grüße
Friemler
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
Dafür braucht es eigentlich nur folgendes Konstrukt
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.
@echo off
set "ProgrammVariable=8"
set "ergebnis=0%ProgrammVariable%"
set "ergebnis=%ergebnis:~-2%"
echo %ergebnis%
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.