Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Brauche Hilfe bei eigenem VB-Scripting-Programm

Chronolus / 4 Antworten / Baumansicht Nickles

Hi. Ich habe gerade damit begonnen Scripting zu lernen und bin noch bei den Grundlagen. Als eine meiner ersten Handlungen habe ich mir ein kleines Programm geschrieben, wo man einen Anfangwert und einen Endwert eingibt und das Programm den Anfangswert solange erhöht, bis er genau so groß wie der Endwert ist. Dann schreibt das Prog noch alles in eine Textdatei. Also eigentlich eine ganz einfache Sache, möchte man meinen. Aber Wenn ich beide Werte eingegeben habe, dann bleibt das Programm in einer Endlosschleife hängen. Das Resultat ist eine Textdatei, die immer größer wird. Bis ich beim ersten mal rausgefunden hatte, was falsch läuft, war die Datei schon fast 400MB groß!

Ich hoffe mir kann jemand helfen dieses Problem zu lösen.
(Gegen Verbesserungsvorschläge hätte ich auch nichts einzuwenden)

Der Code:
----------------

Anfw = InputBox("Geben Sie den Anfangswert ein!",,"")
Endw = InputBox("Geben Sie den Endwert ein!",,"")

Set wshshell = CreateObject("WScript.Shell")
ordner = wshshell.SpecialFolders("MyDocuments")

Set fs = CreateObject("Scripting.FileSystemObject")
dateiname = ordner & "\Liste.txt"
Set file = fs.CreateTextFile(dateiname, True)

Dim Bwert

Bwert = Anfw

do until Bwert = Endw

file.WriteLine Bwert
Bwert = Bwert + 1

loop

file.Close

wshshell.Run """" & dateiname & """"


-------- Ende ----------


 

bei Antwort benachrichtigen
UselessUser Chronolus „Brauche Hilfe bei eigenem VB-Scripting-Programm“
Optionen

Hi Chronolus!

Sehr merkwürdig, will zwar nicht gleich sagen, dass wäre ein Fehler des WSH, aber vom ersten Eindruck ...
Das Problem scheint bei der Übernahme der Variablen von der InputBox-Funktion zu liegen, denn wenn ich probehalber eine Zuweisung des Anfangs- und Endwertes durch Konstanten vornehme, läuft das Programm.
Habe alles Mögliche ausprobiert, die Do-Loop-Schleife in einer Subroutine, Aufruf per Wert oder Referenz, aber das Problem bleibt bestehen, obwohl innerhalb der Schleife die Variablen die gewünschten Werte annehmen und auch die Eintrittsbedingung korrekt ist.
Seltsam ...

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
UselessUser Chronolus „Brauche Hilfe bei eigenem VB-Scripting-Programm“
Optionen

Hallo Chronolus!

Also, anscheinend werden die Variablen aus der Inputbox noch als Strings angesehen und deshalb kann die Beendigungsbedingung der Do-Loop-Schleife niemals erfüllt werden.
Abhilfe: Füge eine Rechenoperation mit den gerade eingegebenen Variablen durch, bevor du sie weiter benutzt. Füge bspw. als 3. Zeile ein:
Anfw = Anfw * 1: Endw = Endw * 1

Dann müsste es funzen!

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
UselessUser Nachtrag zu: „Hallo Chronolus! Also, anscheinend werden die Variablen aus der Inputbox noch...“
Optionen

Du kannst Zeichenketten auch in ganze Zahlen - CInt() - oder Dezimalzahlen - CSng() - umwandeln, z. B.
Anfw = CInt(Anfw): Endw = CInt(Endw)

Dann funktioniert das Ganze auch. Trotzdem komisch, warum er ohne die voher angeführten Operationen bei der Funktion IsNumeric(Anfw) ein "True" ausspuckt und mit Msgbox auch die Zahlen beim Hochzählen richtig anzeigt. Eine Kopfnuss von Bills Programmierern.

Ich gehe jetzt pennen ...

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
T-Rex UselessUser „Nachtrag“
Optionen

IsNumeric reagiert nur auf den Inhalt einer Variablen, nicht auf den Datentyp.

Ein großer Nachteil von VBS ist, daß alle Variablen als Datentyp Variant angesehen werden. In einem Variant kannst Du alles ablegen, sowohl Strings als auch Zahlen und Objekte. Nur die jeweilige Betrachtung liefert dann das, was VBS meint, was es sein könnte.

Generell rate ich von VBS ab. Allein dieses Variablenhandling ist extrem unausgereift.
Poste doch mal, was genau Du vorhast.

 GrüßeT-Rex 
bei Antwort benachrichtigen