xtbodx

Zahl hinter immer gleichem Wort plus 1 rechnen (linear wachsend) - per Batch

Noch eine Frage ;)

Habe eine .txt in der viele Zahlen und Buchstaben in jeder Zeile stehen, jedoch steht in jeder 5. Zeile (ab der 2. Zeile also in Zeile 2, 7, 12, 17 u.s.w.) immer das gleiche Wort (CONTENT) gefolgt von einem Gleichheitszeichen und einer immer gleichen Zahl (=X). Jetzt möchte ich, dass immer X also die Zahl plus eins gerechnet wird, jedoch linear wachsend, damit danach nicht wieder überall die gleiche Zahl steht sondern sich diese immer um eins erhöht. Ich denke durch das Beispiel wird es verständlich ;)

Eingabe.txt
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern

Ausgabe.txt
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=104
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=105
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=106
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=107
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
TAG POS=1 TYPE=TD ATTR=ID:label_addAddressButton
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_keyword CONTENT=108
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_from CONTENT=a
TAG POS=1 TYPE=TEXTAREA FORM=ACTION:/y5/d/cgoptions ATTR=ID:adddea_notes CONTENT=a
TAG POS=2 TYPE=BUTTON ATTR=TXT:Speichern
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 154051

Url: https://administrator.de/forum/zahl-hinter-immer-gleichem-wort-plus-1-rechnen-linear-wachsend-per-batch-154051.html

Ausgedruckt am: 04.05.2025 um 06:05 Uhr

bastla
bastla 29.10.2010 um 22:56:05 Uhr
Goto Top
Hallo xtbodx!

Soferne der Startwert bekannt und die Stellenanzahl der hochzuzählenden Nummer immer 3 ist könnte das so gehen:
@echo off & setlocal
set "Ein=D:\Eingabe.txt"  
set "Aus=D:\Ausgabe.txt"  
set "Kenn=CONTENT=104"  
set /a Nr=104

del "%Aus%" 2>nul  
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
echo %Zeile%|findstr /e "%Kenn%">nul||(>>"%Aus%" echo %Zeile% & goto :eof)  
>>"%Aus%" echo %Zeile:~,-3%%Nr%  
set /a Nr+=1
goto :eof
Anmerkung: Aus Gründen der Genauigkeit wird immer das Zeilenende untersucht (es darf daher auf "CONTENT=104" zB kein Leerzeichen mehr folgen), da ja die letzten 3 Zeichen ersetzt werden sollen. Auch wird bei der Überprüfung auf denn Kennzeichen-String Groß-/Kleinschreibung beachtet - wenn das nicht gewünscht sein sollte, müsste "findstr" zusätzlich den Schalter "/i" erhalten ...

Grüße
bastla
rubberman
rubberman 29.10.2010 um 23:16:18 Uhr
Goto Top
Hallo xtbodx und bastla.

Ein anderer Ansatz wäre, die Abfolge als Grundlage zu nehmen. 6. Token (mit "=" als Delimiter) in der 2. Zeile ist die Startnummer, Jede 5. Zeile ab der 2. wird verändert.

@echo off &setlocal
>"Ausgabe.txt" type nul  
for /f "tokens=1* delims=:" %%a in ('findstr /n . "Eingabe.txt"') do (  
  set /a n=%%a-2
  set "line=%%b"  
  call :procLine
)
pause
goto :eof

:procLine
setlocal enabledelayedexpansion
if "%n%"=="0" (  
  for /f "tokens=6 delims==" %%a in ("!line!") do set /a X=%%a-1  
)
set /a n%%=5
if "%n%"=="0" (  
  for /f "tokens=1-5 delims==" %%a in ("!line!") do (  
    set /a X+=1
    set "line=%%a=%%b=%%c=%%d=%%e=!X!"  
  )
)
>>"Ausgabe.txt" echo\!line!  
endlocal &set "X=%X%"  
goto :eof

Grüße
rubberman