max5moritz
Goto Top

Führende Nullen in Zahlen löschen

Hallo Batchler,

es geht um Auswertung von Datum- und Stunden-Zahlen. Da kommen bisweilen auch führende Nullen vor.
Nun wollte ich die drei Variablen in einer Doppel-Schleife bereinigen. Leider ohne positivem Ergebnis.

folgendes Problem gilt es zu lösen:

AT1d: --24-- AT1h: --09-- AT1m: --28--
Doppel-Schleife
AT1d: --24-- AT1h: --09-- AT1m: --28--
Berechnung
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.


For /F "tokens=1,4,5 Delims=.: " %%i in ('dir /tc "%timLog%"^|Find /i "%txc%"') Do @(  
set "AT1d=%%i"&set "AT1h=%%j"&set "AT1m=%%k")  
echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--

FOR %%i IN (!AT1d:~0,1!,!AT1h:~0,1!,!AT1m:~0,1!) DO @if %%i equ 0 set AT=%%i & For %%j IN (AT1d,AT1h,AT1m) DO @set "%%j=!AT:~1,1!"  

echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--
if "%mont2:~-2,2%"=="ja" echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--  
set /A ATm=(%AT1h%*60)+%AT1m%

Danke schon jetzt für die freundliche Unterstützung.

max5moritz

Content-ID: 197616

Url: https://administrator.de/forum/fuehrende-nullen-in-zahlen-loeschen-197616.html

Ausgedruckt am: 22.12.2024 um 21:12 Uhr

rubberman
rubberman 24.01.2013 aktualisiert um 22:15:50 Uhr
Goto Top
Hallo max5moritz.

Am einfachsten geht das mit einer FOR /F Schleife. Das Prinzip sieht so aus:
set "string=09"  

set /a num=0
for /f "tokens=* delims=0" %%i in ("%string%") do set /a num=%%i  

echo %num%

Grüße
rubberman

PS: Wenn der eingehende String IMMER 2-stellig ist, wäre auch folgendes denkbar:
<code type="plain>set /a "num = 1%string%, num %%= 100"
max5moritz
max5moritz 24.01.2013 um 22:46:13 Uhr
Goto Top
@rubberman

Danke für die schnelle Antwort, doch meine Wunschlösung sieht anders aus. Im folgenden mein Ansatz, der jedoch noch nicht der "letzte Schrei", weil, wie ich finde noch zu viel Zeilen face-wink

For /F "tokens=1,4,5 Delims=.: " %%i in ('dir /tc "%timLog%"^|Find /i "%txc%"') Do @(  
set "AT1d=%%i"&set "AT1h=%%j"&set "AT1m=%%k")  
FOR %%i IN (!AT1d!,!AT1h!,!AT1m!) DO @(
	set /A ATn+=1
	set /A AT2=%%i+0  2>nul
	if %%i neq !AT2! if !ATn! equ 1 set "AT1d=!AT1d:~1,1!"  
	if %%i neq !AT2! if !ATn! equ 2 set "AT1h=!AT1h:~1,1!"  
	if %%i neq !AT2! if !ATn! equ 3 set "AT1m=!AT1d:~1,1!"  
	)
if "%mont2:~-2,2%"=="ja" echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--  

Es geht also darum, wie ich den Inhalt der 2. Schleife (ab 3.Zeile) so komprimiere, dass vielleicht nur ein Zwei- oder Einzeiler daraus wird...
Ich hoffe, dass mein Wunsch nun nachvollziehbarer ist.

max5moritz
rubberman
rubberman 24.01.2013 um 22:59:56 Uhr
Goto Top
Hallo max5moritz.

Was kommt denn eigentlich rein? Also welche Strings würden sich denn beispielhaft in %%i, %%j und %%k finden und was soll am Ende daraus werden?

BTW: Was stört dich an 2 Zeilen mehr oder weniger? Das ist doch völlig belanglos.

Grüße
rubberman
max5moritz
max5moritz 24.01.2013 aktualisiert um 23:20:40 Uhr
Goto Top
Hallo rubberman,

es sind zweistellige Elemente in der Form: " 1", "02" oder eben "21" etc. pp.
Es ist der Tag und die Uhrzeit einer Datei.
Tag : AT1d
Stunde: At1h
Minute: At1m

Und da ich zwecks Berechnung diese Logik zweimal brauche, wird es schon interessant, ob ich Zeilen sparen kann face-wink
Schließlich will ich mit den Zahlen ja dann weiter rechnen, was nur geht, wenn es halt Zahlen sind.

Na ja, natürlich kann ich auch mit meiner Lösung leben. Es war halt eine Frage, ob es nicht auch einfacher oder
eben auch besser geht.

Gruß
max5moritz
rubberman
rubberman 24.01.2013 aktualisiert um 23:57:17 Uhr
Goto Top
Hallo max5moritz.

Etwa so?
for /f "tokens=1,4,5 delims=.: " %%i in ('dir /tc "%timLog%"^|find /i "%txc%"') do (  
  set /a "AT1d = 100%%i, AT1d %%= 100, AT1h = 100%%j, AT1h %%= 100, AT1m = 100%%k, AT1m %%= 100"  
)
echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--

Grüße
rubberman
max5moritz
max5moritz 25.01.2013 aktualisiert um 19:59:48 Uhr
Goto Top
@rubberman

Danke, genau das war es, was ich suchte.

Ich hatte zwischenzeitlich diese Lösung erarbeitet:

For /F "tokens=1-5 Delims=.: " %%i in ('dir /tw "%Media2%"^|Find /i ".%oxc%"') Do @(  
	set /A BTdd=1%%i-100
	set /A BTmm=1%%j-100
	set /A BTjj=%%k/4*4
	set /A BT1h=1%%l-100
	set /A BT1m=1%%m-100
	if not !BTjj! equ %%k set "BTSJ=no"   
	)
set /A BTGm=(%BT1h%*60)+%BT1m%

Deine gefällt mir jedoch besser. Eine Anleitung habe ich inzwischen auch daraus gemacht. Vielleicht kann es ja jemand noch einmal gebrauchen.

Also herzlichen Dank noch einmal - wieder einen "Fall" gelöst. face-smile

Grüße
max5moritz