Wort in mehreren Dokumenten durch Textabschnitt ersetzen
Hallo,
ja, ich weiß, es gibt unzählige Lösungen, die ein Wort durch eine Textphrase ersetzen lassen können, keine Frage. Allerdings suche ich etwas für folgendes Problem:
Ich möchte in einer recht unmfangreichen Zahl von html-Dokumenten vor den <html>-Tag die Doctype-Deklarierung setzen lassen - mit zwei Zweilenumbrüchen Abstand dazwischen.
Das gleiche an den Dokumentenenden für die Einfügung von GoogleAnalytics-tags.
Also nicht nur eine Zeichenfolge durch eine Zeichenfolge ersetzen lassen, sondern eine Zeichenfolge durch eine Zeichenfolge mit einem bestimmten mehrzeiligen Format!
Kennt jemand eine Methode für dieses Problem?
Gruß und vielen Dank im Voraus
rkd
ja, ich weiß, es gibt unzählige Lösungen, die ein Wort durch eine Textphrase ersetzen lassen können, keine Frage. Allerdings suche ich etwas für folgendes Problem:
Ich möchte in einer recht unmfangreichen Zahl von html-Dokumenten vor den <html>-Tag die Doctype-Deklarierung setzen lassen - mit zwei Zweilenumbrüchen Abstand dazwischen.
Das gleiche an den Dokumentenenden für die Einfügung von GoogleAnalytics-tags.
Also nicht nur eine Zeichenfolge durch eine Zeichenfolge ersetzen lassen, sondern eine Zeichenfolge durch eine Zeichenfolge mit einem bestimmten mehrzeiligen Format!
Kennt jemand eine Methode für dieses Problem?
Gruß und vielen Dank im Voraus
rkd
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 89162
Url: https://administrator.de/contentid/89162
Ausgedruckt am: 17.12.2024 um 00:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Rookie-Doo!
Warum stellst Du nicht gleich konkret mit einer Gegenüberstellung "Vorher" - "Nachher" (der relevanten Teile) dar, welche Änderung Du durchführen möchtest?
Dann zeigt sich hoffentlich, ob es vielleicht schon genügen würde, jeweils einige Zeilen an Anfang und Ende der vorhandenen Dateien zu setzen ...
Grüße
bastla
Warum stellst Du nicht gleich konkret mit einer Gegenüberstellung "Vorher" - "Nachher" (der relevanten Teile) dar, welche Änderung Du durchführen möchtest?
Dann zeigt sich hoffentlich, ob es vielleicht schon genügen würde, jeweils einige Zeilen an Anfang und Ende der vorhandenen Dateien zu setzen ...
Grüße
bastla
Hallo Rookie-Doo!
Clevere Vorgangsweise - so kann ich das Testen des folgenden Vorschlages guten Gewissens Dir überlassen ...
Dieses VBScript ist mit dem Typ ".vbs" zu speichern und bearbeitet alle dem angegebenen Typ entsprechenden Dateien (im Beispiel: "*.html") des vorgegebenen Pfades. Die Ersetzung wird "in der Datei" vorgenommen (die neue Version überschreibt die alte Fassung), daher nur mit Kopien testen!
Starten kannst Du das Script aus dem Explorer per Doppelklick, da es keine Argumente erwartet.
Ersetzt wird jeweils der in "Von" angegebene Text durch dessen zeilenmäßige Entsprechung in "Nach" - dadurch ist die Anzahl variabel (was ja in Deinem Sinne sein sollte). Im Beispiel oben sind demnach 2 Paare von "Such-/Ersetzungstexten" angegeben.
Die Schreibweise dafür: Jeder Text steht unter Anführungszeichen und ist vom nächsten Text durch ein Komma getrennt. Übersichtlicher wird es, wenn zusätzlich ein Zeilenumbruch erfolgt - diesen erreichst Du über " _" am Ende der Zeile. Nach dem letzten Text endet die Zeile mit einer schließenden Klammer.
Sonderzeichen, wie der Zeilenumbruch "vbCrLF", können durch Verkettung per "&" an die konstanten Texte angefügt werden. Dies gilt auch für enthaltene Anführungszeichen, welche Du entweder durch Verdoppelung oder mit der Schreibweise Chr(34) angeben kannst - zB wäre für:
entweder
oder
zu schreiben.
Erst danach käme (bei Bedarf) als Trennung von der nächsten Zeile (um noch weitere Ersetzungstexte angeben zu können):
oder die schließende Klammer.
Gesucht wird "case-insensitiv", ersetzt wird entsprechend dem eingegebenen Text - aus "<HTML>" würden durch die Ersetzung demnach 3 zusätzliche Zeilen vorneweg und "<html>".
Grüße
bastla
Clevere Vorgangsweise - so kann ich das Testen des folgenden Vorschlages guten Gewissens Dir überlassen ...
'TagsErsetzen.vbs
Pfad = "D:\Dein Ordner mit vielen html-Dateien"
Typ = LCase("html")
Von = Array("<html>", _
"</Tag, nach welchem GoogleAnalytics-Tag eingefügt werden soll>")
Nach = Array("<Dein DocType>" & vbCrLF & vbCrLF & vbCrLF & "<html>", _
"</Tag, nach welchem GoogleAnalytics-Tag eingefügt werden soll>" & "<GoogleAnalytics-Tag ...... />")
Set fso=CreateObject("Scripting.FileSystemObject")
For Each File In fso.GetFolder(Pfad).Files
If LCase(fso.GetExtensionName(File.Path)) = Typ Then
Text = fso.OpenTextFile(File.Path).ReadAll
For i = 0 To UBound(Von)
Text = Replace(Text, Von(i), Nach(i), 1, -1, 1)
Next
fso.OpenTextFile(File.Path, 2, True).Write Text
End If
Next
Starten kannst Du das Script aus dem Explorer per Doppelklick, da es keine Argumente erwartet.
Ersetzt wird jeweils der in "Von" angegebene Text durch dessen zeilenmäßige Entsprechung in "Nach" - dadurch ist die Anzahl variabel (was ja in Deinem Sinne sein sollte). Im Beispiel oben sind demnach 2 Paare von "Such-/Ersetzungstexten" angegeben.
Die Schreibweise dafür: Jeder Text steht unter Anführungszeichen und ist vom nächsten Text durch ein Komma getrennt. Übersichtlicher wird es, wenn zusätzlich ein Zeilenumbruch erfolgt - diesen erreichst Du über " _" am Ende der Zeile. Nach dem letzten Text endet die Zeile mit einer schließenden Klammer.
Sonderzeichen, wie der Zeilenumbruch "vbCrLF", können durch Verkettung per "&" an die konstanten Texte angefügt werden. Dies gilt auch für enthaltene Anführungszeichen, welche Du entweder durch Verdoppelung oder mit der Schreibweise Chr(34) angeben kannst - zB wäre für:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html>
Nach = Array("<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""" & vbCrLF & " ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">" & vbCrLF & vbCrLF & vbCrLF & "<html>"
Nach = Array("<!DOCTYPE html PUBLIC " & Chr(34) & "-//W3C//DTD XHTML 1.0 Strict//EN" & Chr(34) & vbCrLF & " " & Chr(34) & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" & Chr(34) &">" & vbCrLF & vbCrLF & vbCrLF & "<html>"
Erst danach käme (bei Bedarf) als Trennung von der nächsten Zeile (um noch weitere Ersetzungstexte angeben zu können):
, _
Gesucht wird "case-insensitiv", ersetzt wird entsprechend dem eingegebenen Text - aus "<HTML>" würden durch die Ersetzung demnach 3 zusätzliche Zeilen vorneweg und "<html>".
Grüße
bastla
Hallo Rookie-Doo!
Kurzfasssung: Ändere in "Nach" einfach für die zweite Zeile die Reihenfolge, sodass dort dann eben
steht.
Grüße
bastla
Ist es auch möglich den Text nicht nach, sondern vor einem Tag ersetzen zu lassen?
Es wird generell nicht vor oder nach, sondern einfach der gesamte Suchtext (egal ob Tag oder anderes) ersetzt - daher steht auch jeweils der in "Vor" angegebene zu ersetzende Text dann wieder in "Nach" (an der gewünschten Position).Kurzfasssung: Ändere in "Nach" einfach für die zweite Zeile die Reihenfolge, sodass dort dann eben
...
"<GoogleAnalytics-Tag ...... />" & "</body>")
Grüße
bastla
Hallo Rookie-Doo!
Das sähe dann so aus:
Wenn in der Datei der in Zeile 21 angegebene Suchbegriff "<!DOCTYPE" (Groß- / Kleinschreibung egal) vorkommt, wird die erste in "Von" festgelegte Ersetzung übersprungen.
Grüße
bastla
Das sähe dann so aus:
'TagsErsetzen.vbs
Pfad = "D:\Dein Ordner mit vielen html-Dateien"
Typ = LCase("htm")
Von = Array("<html>", _
"</body>")
Nach = Array("<Dein DocType>" & vbCrLF & vbCrLF & vbCrLF & "<html>", _
"<GoogleAnalytics-Tag ...... />" & "</body>")
LenTyp = Len(Typ)
Set fso=CreateObject("Scripting.FileSystemObject")
DoSubFolders fso.GetFolder(Pfad)
WScript.Echo "Fertig."
Sub DoSubFolders(Folder)
For Each File In fso.GetFolder(Folder).Files
If Left(LCase(fso.GetExtensionName(File.Path)), LenTyp) = Typ Then
Text = fso.OpenTextFile(File.Path).ReadAll
AbText = 0
If InStr(1, Text, "<!DOCTYPE", vbTextCompare) Then AbText = 1
For i = AbText To UBound(Von)
Text = Replace(Text, Von(i), Nach(i), 1, -1, 1)
Next
fso.OpenTextFile(File.Path, 2, True).Write Text
End If
Next
For Each SubFolder In Folder.SubFolders
DoSubFolders SubFolder
Next
End Sub
Grüße
bastla
Hallo,
dürfte ich das Tehma noch einmal aus der Versenkung holen?
Ich suche seit gestern auch nach einem script um alle html dokumente in einem Ordner gleich zu verändern und das oben beschriebene script scheint dafür ja ganz gut zu sein. (oder täusche ich mich? ich möchte bei allen dokumenten eine Tabelle mit einer anderen ersetzen)
Das Problem ist, dass das Script anscheinend doch eine ANweisung erwartet.
Ich erhalte immer den Fehler 800A04000.
Muss ich das Programm erst kompelieren, oder erst die entsprechenden vorher nachers Angaben im Quelltext angeben?
Grüße
dürfte ich das Tehma noch einmal aus der Versenkung holen?
Ich suche seit gestern auch nach einem script um alle html dokumente in einem Ordner gleich zu verändern und das oben beschriebene script scheint dafür ja ganz gut zu sein. (oder täusche ich mich? ich möchte bei allen dokumenten eine Tabelle mit einer anderen ersetzen)
Das Problem ist, dass das Script anscheinend doch eine ANweisung erwartet.
Ich erhalte immer den Fehler 800A04000.
Muss ich das Programm erst kompelieren, oder erst die entsprechenden vorher nachers Angaben im Quelltext angeben?
Grüße