djhanf
Goto Top

Aus TXT bestimmte zeilen ändern

Hi

Hab ne frage und zwar habe ich eine txt datei die so aussieht.


Time
Time
mediaserver
mediaserver
Time
Victoria
merlin
merlin
admin

Ich hab jetzt zwei möglichkeiten mein probelm zu lösen

1 ich baue in mein programm eine bedingugn ein die heißt

wenn in zeile 1 " time" steht muss als variable %null% ausgegeben werden.

oder ich tu in das programm einen befehl zur änderung der txt rein der mir automatisch das wort von

" time" >> "%null%" ändert
vor dem time steht ein leerzeichen.

ich glaube variante 2 is besser für mich da ich eh schon eine txt auswertung davor am laufen habe.

hoffe ihr versteht mich

Content-ID: 150867

Url: https://administrator.de/contentid/150867

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

bastla
bastla 12.09.2010 um 20:38:16 Uhr
Goto Top
Hallo djhanf!

Bis Du Dich endgültig entschieden hast (und unter der Annahme, dass Du mit " time" die im Beispiel oben angeführte Zeile "Time" - aber eben mit führendem Leerzeichen - meinst), ein Vorschlag für Variante 1:
@echo off & setlocal
::
::
set /p Zeile=<1.txt
if /i "%Zeile%"==" time" echo %null%  
Soll " time" aber tatsächlich nur in Kleinbuchstaben erkannt werden, das "if" ohne "/i" verwenden, und falls es auch nach dem Wort noch (ev sogar eine unbekannte Anzahl von) Leerzeichen geben könnte, als Zeile 3
echo "%Zeile%"|findstr /b /c:"\" time">nul && echo %null%
einsetzen ...

[Edit] Da lt obigem Muster in den Zeilen keine Anführungszeichen vorkommen, auf die Schreibweise des Vergleiches mit Anführungszeichen geändert [/Edit]

Grüße
bastla
djhanf
djhanf 12.09.2010 um 20:49:32 Uhr
Goto Top
Hi sags ungerne aber

@echo off & setlocal
set /p Zeile=<pw.txt
if /i "%Zeile%"==" time" echo %null%

Funktioniert bei mir nicht.

txt sieht immernoch gleich aus also " Time" ändert sich nicht

Edit::.. Also "leerzeichenTime" ist immer so es wird nicht 1 leerzeichen mehr oder weniger sein face-smile
bastla
bastla 12.09.2010 um 20:53:59 Uhr
Goto Top
Hallo djhanf!

Ich sag's auch nur ungern - aber Du wolltest %null% ausgeben, und mein Vorschlag bezog sich auf Deine Variante 1 ...

Wenn's also nun wirklich Version 2 sein soll, dann eben:
@echo off & setlocal
::
::
set "Datei=pw.txt"  

set "DateiTemp=%temp%\Eine.tmp"  
set /p Zeile=<"%Datei%"  
copy "%Datei%" "%DateiTemp%">nul  
if /i "%Zeile%"==" time" (  
    echo\%null%
    more +1 "%DateiTemp%"  
)>"%Datei%"  
del "%DateiTemp%"  
[Edit] Zeile 9 an Dein "Edit" angepasst - und um Groß-/Kleinschreibung kannst Du Dich ja selbst kümmern bzw brauchst es in dieser Fassung nicht [/Edit]
[Edit2] Vorgangsweise noch etwas abgewandelt [/Edit2]

Sinnvoller wäre allerdings, den ganzen Zauber zu überspringen, wenn keine Änderung erforderlich ist, also etwa:
@echo off & setlocal
::
::
set "Datei=pw.txt"  

set /p Zeile=<"%Datei%"  
if /i "%Zeile%" neq " time" goto :Weiter  

set "DateiTemp=%temp%\Eine.tmp"  
copy "%Datei%" "%DateiTemp%">nul  
echo\%null%>"%Datei%"  
more +1 "%DateiTemp%">>"%Datei%"  
del "%DateiTemp%"  

:Weiter
::
::
Grüße
bastla
djhanf
djhanf 12.09.2010 um 21:10:27 Uhr
Goto Top
@echo off & setlocal
set "Datei=pw.txt"
set /p Zeile=<"%Datei%"

copy "%Datei%" "Eine.tmp">nul
if /i "%Zeile%"==" Time" (echo %null% more +1 "Eine.tmp")>"%Datei%"
del "Eine.tmp"

Also irgendwie will das nicht so.

Gibt mir immer gleiche datei aus.

hab das %temp% rauß genommen weil die datein alle im gleichen ordner liegen
bastla
bastla 12.09.2010 um 21:14:09 Uhr
Goto Top
Hallo djhanf!

So geht's natürlich auch - aber nur, wenn Du auch beide Befehle in der Klammer ausführst, also:
if /i "%Zeile%"==" Time" (echo %null% & more +1 "Eine.tmp")>"%Datei%"
Außerdem sollte Deine Variable %null% einen Inhalt haben (falls sie leer ist, kann mit "echo\%null%" eine Leerzeile erzeugt werden) ...

Grüße
bastla

P.S.: Wir hätten da eine passende für gepostete Batches ...
djhanf
djhanf 12.09.2010 um 21:21:19 Uhr
Goto Top
%null% soll keine variable sein sonder die ausgabe face-smile vieleicht liegts daran
bastla
bastla 12.09.2010 um 21:26:26 Uhr
Goto Top
Hallo djhanf!

Dann musst Du in einem Batch dafür aber
echo %%null%%
schreiben - ansonsten sollte das aber mit der vorhin geposteten Zeile schon funktionieren (tut's zumindest bei mir, wenn in der ersten Zeile tatsächlich " Time" - mit einem Leerzeichen davor und nix dahinter - steht) ...

Grüße
bastla

P.S.: Auch mit dem Batch weiter oben geht's ...
djhanf
djhanf 12.09.2010 um 21:33:23 Uhr
Goto Top
jetzt muss ich mich entschludigen..
du hast das stichwort genannt 1 zeile.
und zwar das mit der 1 zeile nur bei variante 1 aber in variante zwei meine ich suchen in jeder zeile der txt
bastla
bastla 12.09.2010 um 21:42:49 Uhr
Goto Top
Hallo djhanf!

Wenn ich Dich jetzt (endlich) richtig verstehe, soll also aus
 Time
Time
mediaserver
mediaserver
 Time
Victoria
merlin
merlin
admin
dann
%null%
Time
mediaserver
mediaserver
%null%
Victoria
merlin
merlin
admin
werden? In diesem Fall dann eher so:
@echo off & setlocal
set "Datei=pw.txt"  

set "DateiTemp=%temp%\Eine.tmp"   
move "%Datei%" "%DateiTemp%">nul   
for /f "usebackq delims=" %%i in ("%DateiTemp%") do set "Zeile=%%i" & call :ProcessLine  
del "%DateiTemp%"  
goto :eof

:ProcessLine
if /i "%Zeile%"==" Time" (  
    >>"%Datei%" echo %%null%%  
) else (
    >>"%Datei%" echo %Zeile%  
)
goto :eof
wobei sich die Zeilen 11 - 15 auch kompakter schreiben lassen:
(if /i "%Zeile%"==" Time" (echo %%null%%) else (echo %Zeile%))>>"%Datei%"
Grüße
bastla