HTML [VBScript][HTA] Einträge aus TEXT-Datei löschen (News-Script)

paini

Cadet 3rd Year
Registriert
Apr. 2008
Beiträge
46
Hallo,
Vorab:
Ich bräuchte Hilfe, bei einem für mich nicht zu lösendem Problem, mit einem VBScript in einer HTA Anwendung.
Bin was VBA angeht noch sehr unerfahren und habe bisher trotz mehrerer Stunden suche einfach nichts finden können, was mir weiterhelfen würde.
Würde mich sehr über Antworten und jede noch so kleine Hilfestellung freuen:

Vorhaben:
Ich würde gerne eine Art „News Board „ in einer HTA Anwendung realisieren.
Die HTA soll auf 2-3 Client PCs laufen, es sollen kurze Infos “News“ hinzugefügt werden und gelöscht werden können. die Ausgabe-Seite wird per java script nach einer bestimmten Zeit neu geladen.
leider ist in der Umgebung kein Webserver verfügbar, das ganze läuft auf einem lokalen Netzwerkpfad
Stand:
Das Speichern neuer Datensätze so wie das Auslesen der TXT-Datei klappt soweit.
Beim Speichern vergebe ich jedes mal eine neue „ID“ anhand der Anzahl der Einträge.
mit dieser soll später der gewählte Eintrag gelöscht werden. ( ID1, ID2 usw. ) evtl. wäre es hier besser, als ID einen „Zeitstempel“ zu verwenden aber erst mal muss mein Hauptproblem gelöst werden.
Beim Speichern werden die einzelnen Eingabefelder in eine txt-Datei angehängt und jeweils mit einem Trennzeichen „;.;“ von einander getrennt.
Beim Auslesen, wird die Datei zeilenweise in ein array gelesen, die Zeilen werden dann an dem Trennzeichen gesplittet, um die Einzelnen Werte wieder verarbeiten zu können.

Problem:
Ich schaffe es leider nicht, mit vbScript/HTA eine Dynamisch Ausgabe zu erzeugen, bei welcher dann über einen „löschen“ Button die ID des gewählten Eintrags übergeben werden kann,
„ kurz gesagt, ich bekomme das Script zum Löschen eines bestimmten Eintrags einfach nicht zum laufen“

Fehlermeldung beim betätigen des senden Buttons in der Löschfunktion " Das objekt unterstützt diese Eigenschaft oder Methode nicht.: 'DasFormular.hiddenBox'


Das script beinhaltet 6 Dateien.
lesen.html
löschen.html
schreiben.html
menue.html
start.hta
test.txt

lesen.html
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Ohne_Titel_1</title>
<style type="text/css">.auto-style1 {	background-color: #0099FF; width: 62px}.auto-style2 {	background-color: #0099FF; width: 238px}.auto-style3 {	border: 1px solid #0000FF; width: 238px}</style>

</head>
<script type="text/vbscript">
</script>
<body>
<script type="text/vbscript">

Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\test\test.txt", 1)
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
	document.write("Anzahl der Einträge:" &	i & "<br><br>")
objFile.Close

if i = 0 Then
	document.write(	"<br><br>Es sind keine Einträge vorhanden." )
else
	For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
		'document.write( arrFileLines(l))
    
    	strNextLine = arrFileLines(l) 
    	arrServiceList = Split(strNextLine , ";.;") 
    
		document.write( arrServiceList(0))
		document.write( "<table style=width: 238px><tr><td class=auto-style2 >" & arrServiceList(1))
		document.write( "</td></tr><tr><td class=auto-style3 >" & arrServiceList(2))
		document.write( "</td></tr><tr><td class=auto-style3 >" & arrServiceList(3))
		document.write(	"</td></tr></table><br>" )
	Next
End if

</script>
</body>

</html>

schreiben.html << geändert 9.06.2013 1:53
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Ohne_Titel_1</title>
</head>

<script language="vbscript">
Sub WriteTxt_OnClick()
	
Const strFileName = "c:\test\test.txt"
Dim fso, myFile, iCount, d
d = Day(now)& Month(now)&Year(now)& Hour(now)&Minute(now)&Second(now)
iCount=1
Set fso = CreateObject("Scripting.FileSystemObject")
Set myFile = fso.OpenTextFile(strFileName, 1) ' nur Lesezugriff
Do While myFile.AtEndOfStream <> True
  If Left(myFile.ReadLine, 2) = "ID" Then
    iCount = iCount + 1
  End If
Loop
'	txt.Write document.neuer_Eintrag.ueberschrift.value & VBCRLF
	
	' inhalt = document.neuer_Eintrag.ueberschrift.value

    myFile.Close
	' document.write("Es wurden " & iCount & " Zeilen gefunden." )
	
	Dim fso2, txt	
	Set fso2 = CreateObject("Scripting.FileSystemObject")
	Set txt = fso2.openTextFile(strFileName, 8, False)
	txt.Write d&";.;"&document.neuer_Eintrag.ueberschrift.value & ";.;"
	txt.Write document.neuer_Eintrag.text.value & ";.;"
	txt.Write document.neuer_Eintrag.Author.value & VBCRLF

	' inhalt = document.neuer_Eintrag.ueberschrift.value
	' document.write(inhalt)
	document.write("Eintrag erfolgreich hinzugefügt: <br>Anzahl der Einträge:"& iCount)          	
  	
End Sub
</script>



<body>

<script language="vbscript">
</script>

<form name="neuer_Eintrag">
	<input name="ueberschrift" type="text"><br>
	<textarea name="text" style="width: 512px; height: 41px"></textarea><br>
	<input name="Author" type="text"><br>
	<input type="button" value="Eintrag schreiben" name="WriteTxt">
</form>
</body>

</html>



löschen.html <<< geändert 8.06.2013 13:20
hier habe ich das Problem, dass ich den Wert (ID) der Dynamisch erzeugten Ausgabe nicht an die löschfunktion übergeben bekomme.
die löschfunktion ist noch unvollständig "document.write(DasFormular.hiddenBox.value)"


Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Ohne_Titel_1</title>
<style type="text/css">.auto-style1 {	background-color: #0099FF; width: 62px}.auto-style2 {	background-color: #0099FF; width: 238px}.auto-style3 {	border: 1px solid #0000FF; width: 238px}</style>
</head>
<SCRIPT LANGUAGE="VBScript"> 
<!--
Sub senden2()
  Dim DasFormular
  Set DasFormular = Document.del_Eintrag

	Dim fso, txt, num, num2
		
	document.write(DasFormular.hiddenBox.value)	 ' <<<<<<<<<<<<<<   kann diesen Wert nicht verarbeiten ?! 
		
End Sub
-->
</script>

<body>

<script type="text/vbscript">
Dim arrFileLines(), counter
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\test\test.txt", 1)
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
objFile.Close

counter = 0

For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
    counter = counter + 1
    strNextLine = arrFileLines(l) 
    arrSplitValues = Split(strNextLine , ";.;") 
    
    IDparameter = arrSplitValues(0)
	document.write( "<form name=del_Eintrag><table style=width: 300px><tr><td class=auto-style2 >" & arrSplitValues(1))
	document.write( "</td><td class=auto-style1 rowspan=3><input name=hiddenBox type=text value="&IDparameter&" style=width: 60px /><br>")
	document.write( "<input name=senden type=button value=senden onClick=senden2></td></tr><tr><td class=auto-style3 >" & arrSplitValues(2))
	document.write( "</td></tr><tr><td class=auto-style3 >" & arrSplitValues(3))
	document.write(	"</td></tr></table></form>" )
Next
counter_full = counter

</script>
</body>
</html>

menue.html
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Ohne_Titel_1</title>
<base target="_IF" />
</head>
<body>

<p><a href="lesen.html">lesen</a></p>
<p><a href="schreiben.html">schreiben</a></p>
<p><a href="löschen.html">löschen</a></p>
</body>
</html>

start.hta
Code:
<html>
<head>	
<hta:application ID="NEWS_VBS" APPLICATIONNAME="N_VBS" SingleInstance="Yes" caption="yes" ShowInTaskbar="yes" Border="thin" Scroll="yes" sysMenu="yes" navigable="yes" contextmenu="yes" 	selection="yes">  
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>VBS-news</title>
</head>

<frameset cols="367,*">
	<frame application="yes" name="_menue" scrolling="auto" src="menue.html" target="_IF">
	<frame application="yes" name="_IF" scrolling="auto" src="lesen.html">
	<noframes>
	<body>
	<p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht unterstützt.</p>
	</body>
	</noframes>
</frameset>
</html>

und noch eine leer Text-Datei mit dem Namen "test.txt"

alle Dateien sind zum Testen im Ordner C:\test
 
Zuletzt bearbeitet:
Hallo,

Danke für deinen Hinweis.
hatte das Script durch zahlreiche versuche umgestellt. und vergessen dies an besagter stelle "hiddenBox" wieder zu ändern.

Wenn ich das nun so nutze, wird tatsächlich der Wert der in dem Feld hinterlegt ist, übergeben. allerdings nur, wenn diese Textbox (oder auch Hiddenbox) nur einmal vorhanden ist. sobald das Element mehrfach vorhanden ist, bekomme ich wieder die Fehlermeldung "Das objekt unterstützt diese Eigenschaft oder Methode nicht.: 'DasFormular.hiddenBox'"

Gibt es eine Möglichkeit, direkt mi dem Senden Button einen Wert zu übergeben, oder das ganze irgendwie anderst zu lösen ?


hab die "löschen.html" oben im 1. Post abgeändert. ( bisher wird nur der übergebene Wert darin ausgegeben.
 
Zuletzt bearbeitet:
Wie wär's mit der Idee, dass du für jeden Senden-Button dein eigenes Formular verwendest, oder noch eleganter, du nummerierst deine Boxen wie auch immer durch ("feld1,feld2,feld3,...") und sprichst sie dann mit dieser eindeutigen Id an.
HTML:
<script>
function onc(Feld){
alert(document.getElementById("feld"+Feld).value);
}
</script>
<form>
<input type="text" id="feld1">
<input type="button" onclick="onc(1)" value="Löschen">
</form>
 
Danke für die Tipps!!

habe es nun wie folgt gelöst:
Wobei da auch mehrere Einträge gleichzeitig ausgewählt werden können, welche dann "gelöscht werden"

- habe leider erst jetzt bemerkt, dass wenn bei der Eingabemaske in der schreiben.html ein Text mit Zeilenumbrüchen eingegeben wird, dies zu einem fehler führt. ( da die TXT Datei zeilenweise verarbeitet wird. )
ich denke, dass ich die Zeilenumbrüche irgendwie durch plnatzhalter ersetzten muss, und dann bei der Ausgabe die Umbrüche wieder einfügen.. ( hab noch keine ahnung wie ich das machen soll, werde mir da morgen mal den Kopf zerbrechen.

Wie schon anfangs erwähnt. bin was VBS und allgemein Programmierung angeht absoluter Anfänger

Code:
<html>
<head>
<title>del</title>
</head>
<SCRIPT Language="VBScript">
Option Explicit

Sub loeschen

	Dim fso, txt, num, num2, objButton
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set txt = fso.createTextFile("c:\test\test.txt", 8, False)
 	
        For Each objButton in opt
            If objButton.checked = True Then
               ' MsgBox "Ausgewählt: " & objButton.value 
            else
            txt.WriteLine ( objButton.value)
            End If
        Next 
    txt.Close  
    document.write(	"gelöscht")
End Sub
</SCRIPT>
<body>


<script type="text/vbscript">
Dim arrFileLines(), counter
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\test\test.txt", 1)
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
objFile.Close

counter = 0

if i = 0 Then
	document.write(	"<br><br>Es sind keine Einträge vorhanden." )
else
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
    counter = counter + 1
    strNextLine = arrFileLines(l) 
    arrSplitValues = Split(strNextLine , ";.;") 
        
    document.write(	arrSplitValues(0)&"  :  "&arrSplitValues(1)&" : "&arrSplitValues(2)&" : "&arrSplitValues(3))
	document.write(	"<input name=opt type=checkbox value="&arrSplitValues(0)&";.;"&arrSplitValues(1)&";.;"&arrSplitValues(2)&";.;"&arrSplitValues(3)&"><input type=button value="&arrSplitValues(0)&" onClick=loeschen><br><br>")
	
	
Next
End if
counter_full = counter

</script>

</body>
</html>
 
Zurück
Oben