Text vor einen bestimmten Textabschnitt in Datei einfügen
Hallo,
habe versucht eine Textzeile in einen vorhandenen INI-Datei einzufügen, jedoch wird entweder der ganze Text in der INI gelöscht oder die Textzeile wird an´s Ende des Text gestellt.
Wie kann ich eine Textzeile in eine vorhandene Textdatei vor einen bestimmten Text einfügen, ohne dass der gesamte Inhalt gelöscht wird.
text
einzufügende Textzeile (vor ....."bestimmter Text")
bestimmter Text
"bestimmter Text" steht an unterschiedlichen Zeilen.
Vielen Dank im Voraus für eure Hilfe
suffix
habe versucht eine Textzeile in einen vorhandenen INI-Datei einzufügen, jedoch wird entweder der ganze Text in der INI gelöscht oder die Textzeile wird an´s Ende des Text gestellt.
Wie kann ich eine Textzeile in eine vorhandene Textdatei vor einen bestimmten Text einfügen, ohne dass der gesamte Inhalt gelöscht wird.
text
einzufügende Textzeile (vor ....."bestimmter Text")
bestimmter Text
"bestimmter Text" steht an unterschiedlichen Zeilen.
Vielen Dank im Voraus für eure Hilfe
suffix
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56913
Url: https://administrator.de/contentid/56913
Ausgedruckt am: 26.11.2024 um 17:11 Uhr
6 Kommentare
Neuester Kommentar
Hi suffix, in der Regel kann sowas mit einem Stream Editor gelöst werden. Ich weis nicht ob es in Windows einen gibt, aber für Unix Systeme kann das mit sed gelöst werden (http://de.wikipedia.org/wiki/Sed_%28Unix%29). Falls Windows keine Möglichkeiten dafür bereit stellt, google mal nach unxutils.zip. Darin müsste sich die sed.exe für Windows befinden. Mit dieser kannst du dann in einer *.txt Datei, Texte einfügen bzw. ersetzen.
Ein kleines Beispiel:
Gegeben ist folgende *.ini Datei: (Der Name der Datei ist "test.ini")
Zeile1
Zeile2
Zeile3
Zeile4
Zeile5
Zeile6
Wenn du jetzt vor Zeile 4 einen Text einfügen möchtest, dann in der Konsole folgenden Befehl ausführen:
sed 's/Zeile4/vor Zeile 4\nZeile4/g' test.ini > neue_ini_datei.ini
Der Inhalt der Datei "neue_ini_datei.ini" wäre dann:
Zeile1
Zeile2
Zeile3
vor Zeile 4
Zeile4
Zeile5
Zeile6
Ein kleines Beispiel:
Gegeben ist folgende *.ini Datei: (Der Name der Datei ist "test.ini")
Zeile1
Zeile2
Zeile3
Zeile4
Zeile5
Zeile6
Wenn du jetzt vor Zeile 4 einen Text einfügen möchtest, dann in der Konsole folgenden Befehl ausführen:
sed 's/Zeile4/vor Zeile 4\nZeile4/g' test.ini > neue_ini_datei.ini
Der Inhalt der Datei "neue_ini_datei.ini" wäre dann:
Zeile1
Zeile2
Zeile3
vor Zeile 4
Zeile4
Zeile5
Zeile6
Hallo suffix!
Vorweg ein Versuch als Batch:
Da ich mir nicht ganz sicher war, ob der "bestimmte Text" alleine in einer Zeile steht oder nur in der Zeile vorkommen muss, habe ich Letzteres unterstellt und auch keine Unterscheidung Groß-/Kleinschreibung vorgenommen.
In VBS würde die analoge Vorgangsweise (mit dem Vorteil, dass hier auch Leerzeilen in die Zieldatei übernommen werden) etwa so aussehen:
In beiden Fällen dient die Belegung der Konstanten zu Beginn einer Vereinfachung des Testens - natürlich wäre hier in weiterer Folge die Übernahme von Argumenten aus dem Aufruf des Scripts vorzusehen. Auch auf das Überprüfen auf Vorhandensein der Quelldatei habe ich für's Erste verzichtet.
Grüße
bastla
[Edit] Wenn ich die Augen noch weit genug aufgebracht hätte, um schon vorher oberhalb des Beitrages "Visual Basic, VBA und .Net" zu lesen, hätte ich mir den Batch-Ansatz sparen können ... [/Edit]
Vorweg ein Versuch als Batch:
@echo off & setlocal
set "SuchText=bestimmter Text"
set "Neu=einzufügender Text"
set "Q=D:\Alte.ini"
set "Z=D:\Ganz neue.ini"
If exist "%Z%" del "%Z%"
for /f "usebackq delims=" %%i in ("%Q%") do call :CheckLine "%%i"
goto :eof
:CheckLine
echo %1|findstr /i "%SuchText%" >nul && echo %Neu%>>"%Z%"
(echo %~1)>>"%Z%"
In VBS würde die analoge Vorgangsweise (mit dem Vorteil, dass hier auch Leerzeilen in die Zieldatei übernommen werden) etwa so aussehen:
Const SuchText = "bestimmter Text"
Const Neu = "einzufügender Text"
Const Q = "D:\Alte.ini"
Const Z = "D:\Ganz neue.ini"
Set fso = CreateObject("Scripting.FileSystemObject")
Set OldFile = fso.OpenTextFile(Q, 1)
Lines = Split(OldFile.ReadAll, vbCrLF)
OldFile.Close
Set NewFile = fso.OpenTextFile(Z, 2, True)
For i = 0 To UBound(Lines)
If Instr(LCase(Lines(i)), LCase(SuchText)) Then NewFile.WriteLine Neu
NewFile.WriteLine Lines(i)
Next
NewFile.Close
Grüße
bastla
[Edit] Wenn ich die Augen noch weit genug aufgebracht hätte, um schon vorher oberhalb des Beitrages "Visual Basic, VBA und .Net" zu lesen, hätte ich mir den Batch-Ansatz sparen können ... [/Edit]
@bastla
Dein Skriptansatz wird trotzdem nicht verschwendet gewesen sein.
Auch das Thema "Ini-Editor als Batch und VBS-Skript" habe ich schon eine Zeitlang auf der (kurzen) Liste der geplanten Tutorials für das Forum.
Für ganz Eilige sei angemerkt, dass es derartige Tools natürlich auch schon fertig als Freewaretools gibt - die nennen sich dann entsprechend "IniEdit" oder "IniTools" oder ähnlich Naheliegendes.
Gruss
Biber
[Edit] Noch ein nachgereichter Link zum Tool "IniFile" von den sehr empfehlenswerten "Horst Schaeffer's Software Pages" IniFile.zip.
Und den setze ich auch endlich mal auf "Empfohlene Links" in Batch & Shell...
[/Edit]
Dein Skriptansatz wird trotzdem nicht verschwendet gewesen sein.
Auch das Thema "Ini-Editor als Batch und VBS-Skript" habe ich schon eine Zeitlang auf der (kurzen) Liste der geplanten Tutorials für das Forum.
Für ganz Eilige sei angemerkt, dass es derartige Tools natürlich auch schon fertig als Freewaretools gibt - die nennen sich dann entsprechend "IniEdit" oder "IniTools" oder ähnlich Naheliegendes.
Gruss
Biber
[Edit] Noch ein nachgereichter Link zum Tool "IniFile" von den sehr empfehlenswerten "Horst Schaeffer's Software Pages" IniFile.zip.
Und den setze ich auch endlich mal auf "Empfohlene Links" in Batch & Shell...
[/Edit]
Hallo suffix!
Lass einfach das "Const" weg, dann sind es ganz gewöhnliche Variable.
Für die Übergabe von Argumenten steht die "search.msdn.microsoft.com/search/Redirect.aspx?title=Arguments+Property+(WScript+Object)&url="-Auflistung zur Verfügung.
Im Übrigen:
http://www.microsoft.com/germany/technet/datenbank/articles/600359.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script ...
bzw offline: http://www.microsoft.com/downloads/details.aspx?familyid=01592C48-207D- ... oder script56de.chm suchen.
Grüße
bastla
Lass einfach das "Const" weg, dann sind es ganz gewöhnliche Variable.
Für die Übergabe von Argumenten steht die "search.msdn.microsoft.com/search/Redirect.aspx?title=Arguments+Property+(WScript+Object)&url="-Auflistung zur Verfügung.
Im Übrigen:
http://www.microsoft.com/germany/technet/datenbank/articles/600359.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script ...
bzw offline: http://www.microsoft.com/downloads/details.aspx?familyid=01592C48-207D- ... oder script56de.chm suchen.
Grüße
bastla