infowars
Goto Top

Zahlen aus Textdatei auslesen und exportieren

Moin,
ich möchte aus einer Textdatei Zahlen auslesen und diese in eine andere Datei exportieren.
Das Problem daran ist folgendes:
Die Zahlen der Textdatei liegen zum Teil so vor :

#Kommentar
die zahl 1.2
#Kommentar
die zahl 2.3.4
#Kommentar
die Zahl 3.4.5
#Kommentar
die Zahl 4.5
#Kommentar
usw.

und sollen dann in dieses Format gebracht werden, mit einer 1 und einem Leerzeichen, gefolgt von den Zahlen :

1 1.2.0.0 1.2.255.255
1 2.3.4.0 2.3.4.255
1 3.4.5.0 3.4.5.255
1 4.5.0.0 4.5.255.255

Das lässt sich doch bestimmt mit einer Batch oder so lösen.
Möglicherweise über einen Export in eine Tabelle ?
Leider bin ich kein Batch-Guru, kann mir einer auf die Sprünge helfen ?
MfG

Content-ID: 223090

Url: https://administrator.de/forum/zahlen-aus-textdatei-auslesen-und-exportieren-223090.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

bastla
bastla 27.11.2013 aktualisiert um 13:30:35 Uhr
Goto Top
Hallo infowars!

Auf die Schnelle (und relativ "dirty" face-wink) etwa so:
@echo off & setlocal
set "Quelle=D:\TextMitZahlen.txt"  
set "Ziel=D:\NurZahlen.txt"  

del "%Ziel%" 2>nul  
for /f "delims=" %%i in ('findstr /bv "#" "%Quelle%"') do call :ProcessLine "%%i"  
goto :eof

:ProcessLine
for %%a in (%~1) do set "Zahl=%%a"  
for /f "tokens=1-3 delims=." %%a in ("%Zahl%") do (  
    if "%%c" neq "" (  
        >>"%Ziel%" echo 1 %%a.%%b.%%c.0.%%a.%%b.%%c.255  
    ) else (
        if "%%b" neq "" (  
            >>"%Ziel%" echo 1 %%a.%%b.0.0.%%a.%%b.255.255  
        ) else (
                >>"%Ziel%" echo 1 %%a.0.0.0.%%a.255.255.255  
        )
    )
)
goto :eof
Grüße
bastla
Endoro
Endoro 27.11.2013 aktualisiert um 13:45:26 Uhr
Goto Top
Hey, noch ne Lösung:
@ECHO OFF &SETLOCAL
(for /f "eol=#delims=" %%a in (file) do (  
	set "line=%%a"  
	SETLOCAL ENABLEDELAYEDEXPANSION
	set "line=!line:.=,!"  
	for %%b in (!line!) do (
		echo(%%b|findstr /br "[0-9][0-9]*" >nul&& (  
			set "part1=!part1!%%b."  
			set /a cnt+=1
		)
	)
	set "part2=!part1!"  
	for /l %%b in (!cnt!, 1, 3) do set "part1=!part1!0."&set "part2=!part2!255."  
	echo(1 !part1:~0,-1! !part2:~0,-1!
	endlocal
))>file.new
type file.new
lg.
infowars
infowars 27.11.2013 um 13:49:47 Uhr
Goto Top
Danke, ich werds heute abend gleich mal testen.
MfG
infowars
infowars 27.11.2013 aktualisiert um 18:07:18 Uhr
Goto Top
@bastla
Bei deiner Batch werden die Zahlen nicht durch ein Leerzeichen getrennt, sondern durch einenPunkt, aber die Batch läuft durch wie sie soll:
Also von:
#Kommentar
1.2.3
zu
1 1.2.3.0.1.2.3.255

@Endoro
Super, läuft durch.

Nur habe ich bei beiden Varianten noch ein Leerzeichen hinter den formatierten Zahlen
Thx a lot
MfG
bastla
bastla 27.11.2013 um 18:13:57 Uhr
Goto Top
Hallo infowars!
Bei deiner Batch werden die Zahlen nicht durch ein Leerzeichen getrennt, sondern durch einenPunkt
So sah doch auch Deine Vorgabe aus ...
Nur habe ich bei beiden Varianten noch ein Leerzeichen hinter den formatierten Zahlen
Schau mal, ob in den Zeile 13, 16 und 18 bei meinem Ansatz (dort kannst Du bei Bedarf auch die Punkte durch Leerzeichen ersetzen) bzw 14 bei Endoro dieses Leerzeichen am Ende zu finden ist.

Grüße
bastla
infowars
infowars 27.11.2013 um 18:39:04 Uhr
Goto Top
Sorry, hab mich falsch ausgedrückt, ich meine es sieht so aus statt so:

1 1.2.0.0.1.2.255.255
1 1.2.0.0 1.2.255.255

Dass mit den Leerzeichen werde ich schon hinkriegen.
Passt alles, danke !
MfG
bastla
bastla 27.11.2013 um 18:48:58 Uhr
Goto Top
Hallo infowars!

Und ich habe das Leerzeichen zwischendurch übersehen - auch sorry face-sad

Ersetze den Punkt nach der jeweils letzten 0 in den oben genannten Zeilen durch ein Leerzeichen.

Grüße
bastla