Verschiedene werte Suchen und mit einen Fixwert Erweitern- BATCH
Hallöchen, ich bräuchteein bisschen hilfe mit Suchen & Ersetzen, auf eine etwas andere art...
Ich habe eine Textdatei mit Folgenden Inhalt
Blub 20.008,50
Blub 510,-582
Blub 14,1.5
Blub -88,95
Blub [ZAHL],[ZAHL2]
usw.usf
und am ende soll die Datei folgendermaßen aussehen:
qweasd Q20.008,K50,ppp
qweasd Q510,K-582,ppp
qweasd Q14,K1.5,ppp
qweasd Q-88,K95,ppp
qweasd Q[ZAHL],K[ZAHL2],[EXTRA WERT]
Zur Zeit habe ich es soweit das das Blub in das qweasd umgewandelt wird, jedoch ist mein Problem nun das ich nicht nach den zahlen suchen kann und das Q und das K einfach davorsetzen kann. Vor die 1. Zahl soll IMMER das Q egal ob die zahl posetiv oder negativ ist. Und vor die 2. Zahl immer der K. Und als letztes soll überall ",ppp" angehängt werden.
nun meine frage: Ist dies umsetzbar in batch? mit "einer" einfach schleife, wonach ich einfach nach "den zahlen" suchen kann (nach dem Blub bzw. qweasd ist IMMER ein "blank" nach der 1. Zahl immer 1 "," (komma).
Denn für JEDE zahl eine extra schleife zu erstellen ist zwar theoretisch machbar, aber praktisch nicht umsetzbar, da es keine ahnung wieviele verschiedene zahlen sind
- denn per sufu habe ich nur "einfaches" suchen und ersetzen gefunden, aber nichts womit man mach [Arrays] sozusagen sucht.
MfG Maik aka Kalle
Schonmal Danke im Vorraus und ich hoffe es ist verständlich!
Ich habe eine Textdatei mit Folgenden Inhalt
Blub 20.008,50
Blub 510,-582
Blub 14,1.5
Blub -88,95
Blub [ZAHL],[ZAHL2]
usw.usf
und am ende soll die Datei folgendermaßen aussehen:
qweasd Q20.008,K50,ppp
qweasd Q510,K-582,ppp
qweasd Q14,K1.5,ppp
qweasd Q-88,K95,ppp
qweasd Q[ZAHL],K[ZAHL2],[EXTRA WERT]
Zur Zeit habe ich es soweit das das Blub in das qweasd umgewandelt wird, jedoch ist mein Problem nun das ich nicht nach den zahlen suchen kann und das Q und das K einfach davorsetzen kann. Vor die 1. Zahl soll IMMER das Q egal ob die zahl posetiv oder negativ ist. Und vor die 2. Zahl immer der K. Und als letztes soll überall ",ppp" angehängt werden.
nun meine frage: Ist dies umsetzbar in batch? mit "einer" einfach schleife, wonach ich einfach nach "den zahlen" suchen kann (nach dem Blub bzw. qweasd ist IMMER ein "blank" nach der 1. Zahl immer 1 "," (komma).
Denn für JEDE zahl eine extra schleife zu erstellen ist zwar theoretisch machbar, aber praktisch nicht umsetzbar, da es keine ahnung wieviele verschiedene zahlen sind
- denn per sufu habe ich nur "einfaches" suchen und ersetzen gefunden, aber nichts womit man mach [Arrays] sozusagen sucht.
MfG Maik aka Kalle
Schonmal Danke im Vorraus und ich hoffe es ist verständlich!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159395
Url: https://administrator.de/forum/verschiedene-werte-suchen-und-mit-einen-fixwert-erweitern-batch-159395.html
Ausgedruckt am: 22.04.2025 um 12:04 Uhr
16 Kommentare
Neuester Kommentar
Hallo kalle00und willkommen im Forum!
Wenn, so wie ich das derzeit interpretiere, jede Zeile der Ausgangsdatei umzuwandeln ist, dann etwa so:
Wenn es allerdings so gemeint wäre, dass nur Zeilen, die mit "Blub " beginnen, verarbeitet werden sollen, stellt sich die Frage nach den übrigen (und ev auch leeren) Zeilen der Quelldatei ...
Grüße
bastla
Wenn, so wie ich das derzeit interpretiere, jede Zeile der Ausgangsdatei umzuwandeln ist, dann etwa so:
@echo off & setlocal
set "Alt=D:\Alt.txt"
set "Neu=D:\Neu.txt"
del "%Neu%" 2>nul
for /f "usebackq tokens=1-3 delims=, " %%a in ("%Alt%") do >>"%Neu%" echo qweasd Q%%b,K%%c,ppp
Grüße
bastla
[OT]
Moin kalle00,
willkommen im Forum.
Ich gehöre ja nicht zu kalauerfeindlichen Moderatoren hier, aber...
... wenn ich lese, dass ein neuer Nick namens kalle00 in meinen Bereichen etwas in die codeboxen machen will...
Wenn du einen Beitrag/Kommentar eingibst, wird dir in diesem Eingabefenster ein zusätzlicher Popup-Link "" angeboten.
Dort findest du unter anderem auch die so genannte .
Grüße
Biber
[/OT]
Moin kalle00,
willkommen im Forum.
Ich gehöre ja nicht zu kalauerfeindlichen Moderatoren hier, aber...
... wenn ich lese, dass ein neuer Nick namens kalle00 in meinen Bereichen etwas in die codeboxen machen will...
Wenn du einen Beitrag/Kommentar eingibst, wird dir in diesem Eingabefenster ein zusätzlicher Popup-Link "" angeboten.
Dort findest du unter anderem auch die so genannte .
Grüße
Biber
[/OT]
Hallo kalle00!
Dann muss ich alleredings nochmals nachhaken: Sollen die "ma" und "da" gleich verarbeitet werden, und für die "es" (hier folgen ja 4 Zahlenwerte) gibt es andere Vorschriften [Edit] ... wohl nicht, anstelle von "da" soll ja "abc" verwendet werden ... [/Edit]? Gibt es vielleicht auch noch ganz andere Zeilen, die einfach nur unverändert "mitgenommen" werden sollen?
Vielleicht könntest Du das nochmals anhand einer "Vorher / Nachher"-Gegenüberstellung deutlich machen ...
Grüße
bastla
Dann muss ich alleredings nochmals nachhaken: Sollen die "ma" und "da" gleich verarbeitet werden, und für die "es" (hier folgen ja 4 Zahlenwerte) gibt es andere Vorschriften [Edit] ... wohl nicht, anstelle von "da" soll ja "abc" verwendet werden ... [/Edit]? Gibt es vielleicht auch noch ganz andere Zeilen, die einfach nur unverändert "mitgenommen" werden sollen?
Vielleicht könntest Du das nochmals anhand einer "Vorher / Nachher"-Gegenüberstellung deutlich machen ...
Grüße
bastla
Hallo Kalle,
Versuche mal folgendes Skript:
Die Variablen
Ich hoffe das war verständlich.
Über die Variablen
Um für jedes Wort in
Gruß
Friemler
Versuche mal folgendes Skript:
@echo off
setlocal enabledelayedexpansion
set "Words=ma da"
set "Substitutes=qweased abc"
set "Add=1 0"
set "AddStr=ppp"
set "InputFile=input.txt"
set "OutputFile=CON"
type NUL > "%OutputFile%"
for %%w in (%Words%) do (
for /f "tokens=1*" %%s in ("!Substitutes!") do (
set "Word_%%w=%%s"
set "Substitutes=%%t"
)
for /f "tokens=1*" %%a in ("!Add!") do (
if "%%a" equ "0" set "Add_%%w= "
if "%%a" equ "1" set "Add_%%w=%AddStr%"
set "Add=%%b"
)
)
for /f "usebackq tokens=1-3 delims=, " %%a in ("%InputFile%") do (
for %%w in (%Words%) do (
if "%%a" equ "%%w" (
for /f "tokens=2 delims==" %%s in ('set Word_ ^| find "_%%w="') do (
for /f "tokens=2 delims==" %%x in ('set Add_ ^| find "_%%w="') do (
if "%%x" neq " " (
>>"%OutputFile%" echo %%s Q%%b,K%%c,%%x
) else (
>>"%OutputFile%" echo %%s Q%%b,K%%c
)
)
)
)
)
)
Die Variablen
Words
, Substitutes
, Add
und AddStr
in den Zeilen 6 bis 9 musst Du anpassen, und zwar nach folgender Regel: In der Reihenfolge, in der Du die zu ersetzenden Wörter in die Variable Words
einträgst, musst Du auch die Wörter, durch die sie ersetzt werden sollen in die Variable Substitutes
eintragen. Für jedes Wort, bei dem in der Ausgabedatei am Zeilenende ppp
(oder ein anderes Wort, siehe Variable AddStr
) erscheinen soll, musst Du in der Variablen Add
eine 1
eintragen, sonst eine 0
. Die Reihenfolge der 1
und 0
muss auch wieder mit der Reihenfolge der Wörter in Words
korrespondieren.Ich hoffe das war verständlich.
Über die Variablen
InputFile
und OutputFile
werden die Ein- und Ausgabedateien bestimmt. Ausgabedatei=CON => Ausgabe auf den SchirmUm für jedes Wort in
Words
eine individuelle Erweiterung (statt ppp
) zu definieren, müssen nur kleine Änderungen vorgenommen werden. Sag' dann Bescheid.Gruß
Friemler
Hallo kalle00!
Dann etwa so:
Grüße
bastla
[Edit] Wie habe ich mir denn diese Verspätung eingehandelt?
[/Edit]
Dann etwa so:
@echo off & setlocal
set "Alt=D:\Alt.txt"
set "Neu=D:\Neu.txt"
del "%Neu%" 2>nul
for /f "usebackq delims=" %%i in ("%Alt%") do (
for /f "tokens=1-3 delims=, " %%a in ("%%i") do (
set "Done="
if "%%a"=="ma" echo qweasd Q%%b,K%%c,ppp & set "Done=true"
if "%%a"=="da" echo abc Q%%b,K%%c & set "Done=true"
if not defined Done echo %%i
)
)>>"%Neu%"
bastla
[Edit] Wie habe ich mir denn diese Verspätung eingehandelt?
Hallo kalle00!
Versuch es damit:
Grüße
bastla
Versuch es damit:
@echo off & setlocal
set "Alt=D:\Alt.txt"
set "Neu=D:\Neu.txt"
del "%Neu%" 2>nul
for /f "usebackq delims=" %%i in ("%Alt%") do (
for /f "tokens=1-5 delims=, " %%a in ("%%i") do (
set "Done="
if "%%a"=="ma" echo qweasd %%b,%%c,ppp & set "Done=true"
if "%%a"=="da" echo abc %%b,%%c & set "Done=true"
if "%%a"=="es" (
if %%b lss 0 (echo T51 %%b,%%c,%%d,%%e) else (echo T52 %%b,%%c,%%d,%%e)
echo lll
set Done=True
)
if not defined Done echo %%i
)
)>>"%Neu%"
bastla
Hallo Kalle,
bastla's Script lässt sich sehr leicht an Deine neuen Wünsche anpassen.
Zeile 7 muss lauten:
Hinter Zeile 10 (als neue Zeile 11) muss folgendes eingefügt werden:
Weitere Änderungen solltest Du eigentlich selbst hin bekommen
.
[EDIT]
Oh, zu spät!
[/EDIT]
Gruß
Friemler
bastla's Script lässt sich sehr leicht an Deine neuen Wünsche anpassen.
Zeile 7 muss lauten:
for /f "tokens=1-5 delims=, " %%a in ("%%i") do (
Hinter Zeile 10 (als neue Zeile 11) muss folgendes eingefügt werden:
if "%%a"=="es" (if %%b lss 0 (echo T51 %%b,%%c,%%d,%%e) else (echo T52 %%b,%%c,%%d,%%e)) & (echo lll) & set "Done=true"
Weitere Änderungen solltest Du eigentlich selbst hin bekommen
[EDIT]
Oh, zu spät!
[/EDIT]
Gruß
Friemler
[OT]
@bastla, @Friemler
Eigentlich vermisse ich -ebenfalls stilistisch- den dezenten Hinweis:
@kalle00
Dieser feedbacklose Beitrag steht schon ein paar Tage auf meiner Beobachtungsliste.
Und er steht nur deshalb nicht bis zu den Knöcheln im Kompost, weil er IMHO auch ohne (d)ein Feedback durchaus hilfreich für einige MitleserInnen sein kann.
Ich bitte dich dennoch, dieses Mal dranzubleiben, bis auch die Verständisfragen geklärt sind und den Beitrag dann auch als "erledigt" zu kennzeichnen.
Beim Thema "nur mal schnell ein Copy&Paste als eigene Leistung ausgeben" - Ja Hey! Heisst du etwa auch "Kalle von und zu Irgendwas"??.
Na also...
Grüße
Biber
[/OT]
@bastla, @Friemler
Eigentlich vermisse ich -ebenfalls stilistisch- den dezenten Hinweis:
"Hey, wieso hast du nicht vor einem Monat schon gesagt, dass du unsere Ausführungen weder gelesen noch verstanden hast?"
@kalle00
Dieser feedbacklose Beitrag steht schon ein paar Tage auf meiner Beobachtungsliste.
Und er steht nur deshalb nicht bis zu den Knöcheln im Kompost, weil er IMHO auch ohne (d)ein Feedback durchaus hilfreich für einige MitleserInnen sein kann.
Ich bitte dich dennoch, dieses Mal dranzubleiben, bis auch die Verständisfragen geklärt sind und den Beitrag dann auch als "erledigt" zu kennzeichnen.
Beim Thema "nur mal schnell ein Copy&Paste als eigene Leistung ausgeben" - Ja Hey! Heisst du etwa auch "Kalle von und zu Irgendwas"??.
Na also...
Grüße
Biber
[/OT]