147. Text am Anfang und Ede eines Textes mit VBS einfügen und den
Text im HTML-Dokument mit Javascript auslesen
Einleitung
Kleines Projekt aus zwei Komponenten in mein öffentliches Tagebuch -
Das Einfügen von Text am Anfang und Ende eines
Textdokumentes ist zumindest mit VBS eine einfache Sache von
sieben Zeilen.
Gerade, wenn man z. B. Text zur Erstellung einer Webseite braucht, sind
div-Elemente oder p am Anfang und Ende als Tags unersetzlich. Als
Erweiterung dann, wie ich an den Text herankomme per id und der
getElementById - Methode, die alle Browser interpretieren können. Ich
weiß, ich habe einen ausführlichen Javascriptbereich, aber da diese beiden
Komponenten zusammengehören, wird das hier als Zweikomponententip
eruiert...
Code 1 VBS
Textdokument erstellen, Code eintragen und z. B. probe.vbs umbenennen und ein
zweites Textdokument mit Namen irgendein.txt
erstellen:
Dim oFSO1, text1, oFile4
set oFSO1=CreateObject("Scripting.FileSystemObject")
set oFile4=oFSO1.OpenTextFile("irgendein.txt",1,true)
text1=oFile4.ReadAll
set oFile4=oFSO1.OpenTextFile("irgendein.txt",2,true)
oFile4.WriteLine "<div id=masterpass class=""hideClass"" >" & text1 & "</div>"""
oFile4.Close
In der ersten Zeile wurden etwas schlampig Variablennamen definiert...
In der zweiten Zeile wird wie üblich in VBS eine leere Arbeitsumgebung
als Hülle geschaffen,
die in der dritten Zeile mit einem Textdokument im Lesemodus (1) geöffnet wird.
In diesem Modus kann dann in Zeile 4 die Variable text.1 mit dem Text von irgendein.txt gleichgesetzt
werden.
Danach wechseln wir in Zeile fünf den Modus auf Schreibmodus. Die Hülle
mit dem Textdokument wurde schließlich bereits in der Zeile 1 mit
CreateObject geschaffen.
Der Modus 2 ist nun für irgendein.txt aktiviert und
der folgende Befehl muss dann irgendwas mit destruktiven Schreiben zu
tun haben...
Der Befehl Writeline leitet den Text in Anführungszeichen ein "irgendein.txt" Jetzt wird es
ein wenig gemein, denn außer der div id masterpass kommt da noch der
Befehl class="hideClass", also vergibt der Autor außer der ID noch eine
Klasse für die CSS-Bearbeitung, die im Gegensatz zur einfachen id noch
einen Text mit Anführungszeichen beinhaltet: class="hideClass".
Anführungszeichen können im WriteLine-Befehl über Verdopplung
oder über die Verwendung von chr(34) eingefügt werden.
Nachtrag 09.05.2014
Vielleicht doch mal die Variante mit chr(34), da die ein wenig cooler ist:
Dim oFSO1, text1, oFile4
set oFSO1=CreateObject("Scripting.FileSystemObject")
set oFile4=oFSO1.OpenTextFile("irgendein.txt",1,true)
text1=oFile4.ReadAll
set oFile4=oFSO1.OpenTextFile("irgendein.txt",2,true)
oFile4.WriteLine "^<div id=masterpass class=" & chr(34) & "hideClass" &chr(34) & "^>"& text1 & "^</div^>"
oFile4.Close
Das ist ein wenig komplizierter.
Ansonsten gilt die Regel: Ein kaufmännisches Und & trennt
Textstücke. Variablennamen wie text1 ohne Anführungszeichen, Text von
ihnen mit Anführungszeichen am Anfang und Ende auch nach jedem &
und ab und zu verlangt die Konsole auch noch Setzung eines weiteren
Anführungszeichens am Schluss, so dass dann unsinnigerweise drei
Anführungszeichen am Ende stehen, was der pragmatischer Selbstlerner
und Autodidakt achselzuckend zur Kenntnis nimmt
Na, Sie können also ohne bedenken <div> und </div>
einfügen, gerne auch mit id, weil da eher für VBS unspektakuläre Zeichen
erforderlich sind.
Ich beschränke mich auf den kürzesten Code - dieses definieren
von for reading mit 1 ist so etwas von unnötig...
Ach ja, liegt ihr Text in einem anderen Ordner, dann müssen Sie
natürlich den Pfad anpassen, aber so mit relativen Bezug müssen Sie
nicht jedes Mal den Pfad anpassen...
Und close am Ende gehört einfach dazu, weil dass nicht nur zum guten
Stil gehört, sondern Sie ja auch nicht alle anderen Anwendugen offen
stehen lassen...
--------
Zweiter Teil: Text im HTML-Dokument mit
Javascript auslesen
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>probemasterpass</title>
<meta name="generator" content="HTML Studio">
<script language="JavaScript">
function enc3() {
var mpassbrob=document.getElementById("masterpass").innerHTML;
document.changeForm.dialog.value = mpassbrob
}
</script>
</head>
<body>
<center>
<FORM NAME="changeForm">
<div><h1>Verschlüsselung mit
Babel</h1><div>
<div><textarea id=dialog rows="10"
cols="35"></textarea></div>
<br>
<div>
<INPUT TYPE="BUTTON" onClick="enc3()" VALUE="Button">
<br><div id=masterpass
class="hideClass" >
Hier ein beliebiger Text
</div>
<style>
.hideClass
{display:none;}
</style>
<br></div>
<br>
</FORM></center>
</body>
</html>
Text kopieren und als HTML Seite aufrufen.
Im verborgenen DIV-Container steht also ein Text im Body, der bei
Aufruf der Funktion f3 durch den Button gestartet wird und im
Javascript im Headbereich mit der getElementById Methode
eingelesen wird:
var
mpassbrob=document.getElementById("masterpass").innerHTML;
Die Variable massprob beinhaltet also den Text im Feld mit der Variable
von masterpass also Hier ein beliebiger Text
Das kürzel innerhtml ist Pflicht ud irretierend zugleich, da es sich ja
um einen Text handelt, der zwischen zwei Tags steht...
Vorsicht Falle, nur der Internetexplorer versteht innerText, aber da in
einem HTML-Dokument bekannter maßen nur div- Text steht kein
wirklicher Beinbruch.
Beim Öffnen sehen Sie den unsichtbaren Text Hier
ein beliebiger Text nicht, da dieser mit der CSS-Klasse
hideClass versehen wurde, dessen Befehl display:none die Anzeige des
Textes erstmal verhindert.
Beim Drücken des Buttons wird der Text in das sichtbare Textfeld Dialog
exportiert document.changeForm.dialog.value
= mpassbrob , so dass Sie den Text in der Textärea angezeigt
bekommen.
Sie haben also gerade gelernt, wie Sie Text als Variable in ein
Javascript einlesen und dann irgendetwas damit machen bzw. wieder
ausgeben können.
Der Vorteil ist die Flexibilität, da Sie durch dieses Prozeder
Buchstaben einlesen können, die Javascript im Headbereich nicht
akzeptieren würde - es sind alle Zeichen erlaubt, die im <div>
Bereich erlaubt sind und das ist eine mächtige Waffe im Umgang mit Text.
Zumindest eingefleischte Javascriptschreiber wissen, was ich damit
meine...