blubbblubb17
Goto Top

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:

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

Content-ID: 119813

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

Ausgedruckt am: 16.11.2024 um 06:11 Uhr

76109
76109 06.07.2009 um 13:20:36 Uhr
Goto Top
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
BlubbBlubb17
BlubbBlubb17 07.07.2009 um 17:35:25 Uhr
Goto Top
Hallo Dieter, danke für den Tipp.

nach jedem String? Also nach jedem "? oder wie müsste das bei

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>")  

aussehen?

Ich komme einfach nicht dahinter wie ich das Script zum laufen bringe und langsam brauch ich das wirklich sonst komme ich mit meiner homepage nicht mehr dem nach was ich so alles vorhatte.

Grüße
76109
76109 07.07.2009 um 18:38:25 Uhr
Goto Top
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:

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")  
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
BlubbBlubb17
BlubbBlubb17 07.07.2009 um 20:06:33 Uhr
Goto Top
Hallo Dieter,
das mit dem Zerlegen mit Kommas und dem VOn(0) (1).... verstehe ich jetzt nocht so ganz. Wann muss man das machen und wann nicht?

Da es aber um genau diese Tabelle geht würde mich auc heher deine letzte methode interessieren.
hier ist doch ein eindeutiger Start und ein eindeutiges </table>:

  <table width="700" border="0" cellspacing="0" cellpadding="0">  
        <tr>
          <td width="140" align="center""><a href="index.html">Start</a></td>  
          <td width="140" align="center" valign="middle"><a href="kites.html">Kites</a></td>  
          <td width="140" align="center" valign="middle"><a href="Videos.html">Videos</a></td>  
          <td width="140" align="center" valign="middle"><a href="Testberichte.html">Testberichte</a></td>  
          <td width="140" align="center" valign="middle"><a href="Kontakt.html">Kontakt</a></td>  
        </tr>
      </table>

Wie müsste die Von Angabe denn dann aussehen?
76109
76109 07.07.2009 um 20:37:07 Uhr
Goto Top
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:
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ändlicherface-smile

Gruß Dieter
76109
76109 08.07.2009 um 11:08:13 Uhr
Goto Top
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.

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