VBScript funktioniert nicht so ganz
Guten Tag administrator Forum.
Ich suche seit ein paar Tagen nach einem Programm, dass mir das bearbeiten von mehreren html dateien auf einmal abnmimmt.
Ich habe hierzu ein VBscript von bastla gefunden und versucht auf mich anzupassen (danke nochmals an bastla).
Allerdings bekomme ich immer noch den Fehler
Ungültiges Zeichen bei Zeile 1 Zeichen 1
Der Fehlercode lautet 800A0408
und er gibt es mir als kompilierungsfehler an.
hier der Quelltext:
Ich möchte mit dem Programm (in diesem Fall) eine Tabelle durch eine andere ersetzen. Aber ich wollte erstmal einen testlauf machen.
Grüße
Ich suche seit ein paar Tagen nach einem Programm, dass mir das bearbeiten von mehreren html dateien auf einmal abnmimmt.
Ich habe hierzu ein VBscript von bastla gefunden und versucht auf mich anzupassen (danke nochmals an bastla).
Allerdings bekomme ich immer noch den Fehler
Ungültiges Zeichen bei Zeile 1 Zeichen 1
Der Fehlercode lautet 800A0408
und er gibt es mir als kompilierungsfehler an.
hier der Quelltext:
Pfad = "C:\Dokumente und Einstellungen\Boing\Desktop\hptests"
Typ = LCase("html")
Von = Array("<table width=""700"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & vbCrLF & _
"<tr>" & vbCrLF & _
"<td width=""140"" align=""center""><a href=""index.html"">Start</a></td>" & vbCrLF & _
"<td width=""140"" align=""center"" valign=""middle""><a href=""kites.html"">Kites</a></td>" & vbCrLF & _
"<td width=""140"" align=""center"" valign=""middle""><a href=""Videos.html"">Videos</a></td>" & vbCrLF & _
"<td width=""140"" align=""center"" valign=""middle""><a href=""Testberichte.html"">Testberichte</a></td>" & vbCrLF & _
"<td width=""140"" align=""center"" valign=""middle""><a href=""Kontakt.html"">Kontakt</a></td>" & vbCrLF & _
"</table>")
Nach = Array("testtest")
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
Ich möchte mit dem Programm (in diesem Fall) eine Tabelle durch eine andere ersetzen. Aber ich wollte erstmal einen testlauf machen.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119813
Url: https://administrator.de/contentid/119813
Ausgedruckt am: 16.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo BlubbBlubb17!
Wenn Du ein Array definierst, dann musst Du die einzelnen Strings durch ein Komma voneinander trennen z.B.:
Von = Array("string", "string", .....)
Gruß Dieter
Wenn Du ein Array definierst, dann musst Du die einzelnen Strings durch ein Komma voneinander trennen z.B.:
Von = Array("string", "string", .....)
Gruß Dieter
Hallo BlubbBlubb17!
So genau hatte ich mir Deinen Code letztes mal nicht angesehen. Mir ist nur aufgefallen, dass die Array's falsch definiert sind. D.h. Du hast nur Strings mit unsinng oft "" definiert.
Als String eine Zeichenfolge von Anfang bis Ende würde es in etwa so heissen:
Sind innerhalb
eines Strings die Zeichen ", wie vermutlich bei href ="text", dann
müsste dieser Teil so heissen: href=""text"">...
Wenn aber eine ganze Tabelle ersetzt weren soll, ist das viel zu umständlich.
Da kann man eine ganze Tabelle durch ein Split <tr> und </table> raushauen, sofern erkennbar ist, das es die gewünschte Tabelle ist, die rausfliegen soll.
Daher brauche ich schon genau Info's. Z.B. Eindeutig am Anfang ">Start<" und am Ende "Kontakt" oder definitiv ein </table>
Gruß Dieter
So genau hatte ich mir Deinen Code letztes mal nicht angesehen. Mir ist nur aufgefallen, dass die Array's falsch definiert sind. D.h. Du hast nur Strings mit unsinng oft "" definiert.
Als String eine Zeichenfolge von Anfang bis Ende würde es in etwa so heissen:
Von = & _
"<table width=700 border=0 cellspacing=0 cellpadding=0>" & vbCrLF & _
"<tr>" & vbCrLF & _
"<td width=140 align=center><a href=index.html>Start</a></td>" & vbCrLF & _
"und so weiter"
Als Array mit Komma in einzelne Strings zerlegt in etwa so:
Von = Array( & _
"<table width=700 border=0 cellspacing=0 cellpadding=0>" & vbCrLF, & _
"<tr>" & vbCrLF, & _
"<td width=140 align=center><a href=index.html>Start</a></td>" & vbCrLF, & _
"und so weiter")
Dann wäre:
Von(0) = "<table width=700 border=0 cellspacing=0 cellpadding=0>" & vbCrLF
Von(1) = "<tr>" & vbCrLF
Von(2) = "<td width=140 align=center><a href=index.html>Start</a></td>" & vbCrLF
Von(3) = "und so weiter")
eines Strings die Zeichen ", wie vermutlich bei href ="text", dann
müsste dieser Teil so heissen: href=""text"">...
Wenn aber eine ganze Tabelle ersetzt weren soll, ist das viel zu umständlich.
Da kann man eine ganze Tabelle durch ein Split <tr> und </table> raushauen, sofern erkennbar ist, das es die gewünschte Tabelle ist, die rausfliegen soll.
Daher brauche ich schon genau Info's. Z.B. Eindeutig am Anfang ">Start<" und am Ende "Kontakt" oder definitiv ein </table>
Gruß Dieter
Hallo BlubbBlubb17!
Ja, wenn es in den verschiedenen Dateien nur diese eine Tabelle gibt, dann währe das natürlich optimal. Ansonsten währe wohl >Start< und >Kontakt< ein Indiz.
Schau Dir meine Beispiele doch mal etwas genauer an:
Das eine mit String ist eine einzelne komplette Zeichenfolge und das andere ist ein Array, dass meherere einzelne Zeichenfolgen enthält, die jeweis an einem Komma enden. Von(0) = String bis zum1. Komma, Von(1) = String nach dem 1. Komma bis zum 2.Komma usw.
Und eine For-Schleife mit UBound(Von) funktioniert NUR mit Arrays. Mit Strings geht das nicht. Den kann man höchtens mit Hilfe anderer Funktionen in einzelne Zeichen zerlegen.
String:
Array:
Hoffe, dass war jetzt etwas verständlicher
Gruß Dieter
Ja, wenn es in den verschiedenen Dateien nur diese eine Tabelle gibt, dann währe das natürlich optimal. Ansonsten währe wohl >Start< und >Kontakt< ein Indiz.
Schau Dir meine Beispiele doch mal etwas genauer an:
Das eine mit String ist eine einzelne komplette Zeichenfolge und das andere ist ein Array, dass meherere einzelne Zeichenfolgen enthält, die jeweis an einem Komma enden. Von(0) = String bis zum1. Komma, Von(1) = String nach dem 1. Komma bis zum 2.Komma usw.
Und eine For-Schleife mit UBound(Von) funktioniert NUR mit Arrays. Mit Strings geht das nicht. Den kann man höchtens mit Hilfe anderer Funktionen in einzelne Zeichen zerlegen.
String:
Von = "Eine Zeichenfolge"
Array:
Von = Array("1. Zeichfolge", "2. Zeichenfolge", "3. Zeichenfolge", "usw")
Das sind 4 Strings, die in Von(i=0) bis Von(i=3) angesprochen werden können.
Hoffe, dass war jetzt etwas verständlicher
Gruß Dieter
Hallo BlubbBlubb17!
Also, dieser Code ersetzt eine vorhandene Tabelle mit der NewTable-Tabelle.
Existiert in einer Html-Datei keine Tabelle passiert nichts und wenn mehrere Tabellen existieren, dann passiert auch nichts. D.h., das nur dann die NewTable-Tabelle in die Html-Datei eingefügt wird, wenn diese explizit nur eine Tabelle enthält, die mit "<table" beginnt und mit "</table>" endet.
Gruß Dieter
Also, dieser Code ersetzt eine vorhandene Tabelle mit der NewTable-Tabelle.
Existiert in einer Html-Datei keine Tabelle passiert nichts und wenn mehrere Tabellen existieren, dann passiert auch nichts. D.h., das nur dann die NewTable-Tabelle in die Html-Datei eingefügt wird, wenn diese explizit nur eine Tabelle enthält, die mit "<table" beginnt und mit "</table>" endet.
Const Path = "C:\Dokumente und Einstellungen\Boing\Desktop\hptests"
Dim Fso, File, Text, Text1, Text2, NewTable
NewTable = "<table ....." & vbCrLf & _
"<tr>" & vbCrLf & _
"<.....=""Text mit Quote"" ......" & vbCrLf & _
"<..............................." & vbCrLf & _
"</table>" 'Hier kein vbCrLf mehr anfügen
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each File In Fso.GetFolder(Path).Files
If LCase(Right(File.Name, 5)) = ".html" Then
Text = Split(Fso.OpenTextFile(File.Path).ReadAll, "<table")
If UBound(Text) = 1 Then
Text1 = Text(0)
Text2 = Split(Text(1), "</table>", 2)(1)
Text = Text1 & NewTable & Text2
Fso.OpenTextFile(File.Path, 2, True).Write Text
End If
End If
Next
Gruß Dieter