VBScript -> Bitte um Hilfe
Marco
- programmiertechnik
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
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.
- Dynamische Linkgenerierung von Dateilinks (funktioniert)
- 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.
- 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