Marco: VBScript -> Bitte um Hilfe

Hallo, alle zusammen.

Ich befasse mich grad mit folgenden Thema:

1. Dynamische Linkgenerierung von Dateilinks (funktioniert)
2. Onclick Ereigniss -> Übergabe des Pfadnames an eine Funktion

Funktioniert nicht was kann ich ändern damit der Pfad korrekt übergeben wird

3. Befüllen eines Textareas mit dem Inhalt der Dateien

Wie kann ich in VBScript den Inhalt der Dateien an die Textarea übergeben (Befüllen der Textarea bei Onclickereignis)

'Ordner öffnen
Set fso = CreateObject("Scripting.FileSystemObject")
'Set folder = fso.GetFolder(strValue)
Set folder = fso.GetFolder("D:\test")

'Übergabe der Dateianzahl an Var X
Set Files = folder.Files
X = Files.Count

'Deklaration der Variablen
Dim Dateiname(99),Pfad(99),i
i=0

For Each File In folder.Files
'Einlesen der Dateinamen in ein Array
 Dateiname(i) = CStr(File.Name)
Pfad(i) = CStr(File)
 i=i+1
Next

For i = 0 To X-1

set liste = document.getElementById("Menu")

set li = document.createElement("li")
set a = document.createElement("a")
a.href="#"
a.onclick=Writelog(pfad(i)
set txt = document.createTextNode(pfad(i))
a.appendChild(txt)
li.appendChild(a)
liste.appendChild(li)

Next

function Writelog(Dateiname)

Dim Datei,doc,sText

Set Datei = CreateObject("Scripting.FileSystemObject")

Set File = Datei.OpenTextFile("D:\test\test.txt",1,-1)

Do While Not File.AtEndOfStream
sText = File.ReadAll
Loop

End function

</script>

</td>

<td class="main_2" colspan="5">

<form name="frm_logViewer">
<textarea name="output" rows="37" cols="120" ></textarea></form>

</td>
  </tr>

Danke Marco

  1. Hallo Marco,

    ich gehe davon aus, dass es sich entweder um eine lokale Anwendung oder eine
    Intranet-Anwendung handelt - und Du Dir über die Sicherheitseinstellungen im
    Klaren bist.

    1. Dynamische Linkgenerierung von Dateilinks (funktioniert)
    2. Onclick Ereigniss -> Übergabe des Pfadnames an eine Funktion

    Funktioniert nicht was kann ich ändern damit der Pfad korrekt übergeben wird

    den Pfad korrekt übergeben :-)
    Bitte beachte, dass der Backslash Maskierungszeichen ist. Deswegen musst Du
    die Backslashes in Pfadangaben immer doppelt hinschreiben.

    1. Befüllen eines Textareas mit dem Inhalt der Dateien

    Wie kann ich in VBScript den Inhalt der Dateien an die Textarea übergeben (Befüllen der Textarea bei Onclickereignis)

    'Ordner öffnen
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Set folder = fso.GetFolder(strValue)
    Set folder = fso.GetFolder("D:\test")

    Siehst Du? Diese Anweisung muss korrekt

      
    Set folder = fso.GetFolder("D:\\test")  
    
    

    lauten.

    'Übergabe der Dateianzahl an Var X
    Set Files = folder.Files
    X = Files.Count

    'Deklaration der Variablen
    Dim Dateiname(99),Pfad(99),i

    Ahja, in einem Verzeichnis dürfen grundsätzlich nicht mehr als 99 Dateien sein? Das kannst Du mit der ReDim-Anweisung allgemeiner halten:

    Dim Dateiname()
    Set Files = folder.Files
    X = Files.Count
    ReDim Dateiname(X)

    [...]

    a.onclick=Writelog(pfad(i)

    Hier fehlt erstens eine schließende Klammer und zweitens musst Du alle Slashes
    in pfad(i) durch Doppelslashes ersetzen.

    function Writelog(Dateiname)
        Dim Datei,doc,sText
        Set Datei = CreateObject("Scripting.FileSystemObject")
        Set File = Datei.OpenTextFile("D:\test\test.txt",1,-1)

    ' Da Du Die Methode ReadAll des TextStream-Objektes nutzt,
           ' ist die Do-While-Schleife überflüssig.

    Wie oft musst Du den gesamten Text aus einer Datei lesen, um den ganzen Text
    in einer Zeichenkette zu haben?

    Richtig: Einmal.

    Do While Not File.AtEndOfStream
            sText = File.ReadAll
        Loop

    Nun hast Du den Inhalt in einer Variablen, die nur innerhalb der Funktion
    existiert. Du machst nichts mit dem Inhalt, Du wirfst ihn einfach bei
    Beenden der Funktion weg, statt ihn in Deine Textarea zu schreiben.

    End function

    Hier stelle ich Dir eine HTML-Datei vor, die via VB-Script den Inhalt einer
    fest vorgegebenen Textdatei auf Buttonklick in die Textarea schreibt. Klar,
    das funktioniert nur bei entsprechend lockeren Sicherheitseinstellungen .-)

      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
            "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
        <title>Test: Schreibe mit VB-Script Dateiinhalt in Textarea</title>  
        <script type="text/vbscript">  
        Function Writelog(Dateiname)  
      
            ' Das Schreiben einer Zeichenkette in eine Textarea erfolgt einfach  
            ' durch Zuweisen der Zeichenkette an die value-Eigenschaft der Textarea  
            document.frm_logViewer.output.value = ReadLog(Dateiname)  
      
        End function  
      
        ' In der folgenden Funktion versuche ich, eine einfache Fehlerbehandlung  
        ' einzubauen. Einzige Möglichkeit der Fehlerbehandlung in VB-Script ist  
        ' die Nutzung von On Error Resume Next  
        Function ReadLog(Dateiname)  
            Dim fso, tsDatei  
      
            ' In der Variablen mit dem gleichen Namen wie dem Funktionsnamen  
            ' speichert VB-Script den Rückgabewert einer Funktion  
            ReadLog = ""  
      
            ' Fehlerbehandlung einschalten  
            On Error Resume Next  
      
            ' Schlägt fehl, wenn die Sicherheitseinstellungen die Ausführung  
            ' nicht zulassen.  
            Set fso   = CreateObject("Scripting.FileSystemObject")  
            If Err.Number > 0 Then  
                ReadLog = "Fehler aufgetreten " & chr(10) & chr(13) & Err.Description  
                Err.Clear  
                Exit Function  
            End If  
      
            ' Kann fehlschlagen, wenn die Datei nicht geöffnet werden kann  
            Set Datei = fso.OpenTextFile(Dateiname, 1, -1)  
            If Err.Number > 0 Then  
                ReadLog = "Fehler aufgetreten " & chr(10) & chr(13) & Err.Description  
                Err.Clear  
                Set fso   = Nothing  
                Exit Function  
            End If  
      
            ReadLog   = Datei.ReadAll  
      
            ' Aufräumarbeiten  
            Datei.Close  
            Set Datei = Nothing  
            Set fso   = Nothing  
      
        End Function
    

    </script>
    </head>

    <body>
    <div>
        <form name="frm_logViewer">
            <dl>
            <dt><textarea name="output" rows="37" cols="120"></textarea></dt>

    <!-- Achte auf die doppelten Backslashes bei der Pfadangabe  -->
            <dd><button onclick='Writelog("D:\test\test.txt")'>Datei D:\test\test.txt einlesen</button></dd>

    <!-- Für meine Tests habe ich mir genau diese Datei angelegt :-) -->

    </dl>
        </form>
    </div>
    </body>
    </html>
    [/code]

    Freundliche Grüße

    Vinzenz