Vinzenz Mai: VBScript, Backslashes in Pfadangaben, Text in Textarea schreiben

Beitrag lesen

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