VBS randomize Problem
Hallo, VBS ist ja möglicherweise nicht mehr State of the Art, hilft mir aber trotzdem. Das unten beschriebene Script erzeugt mir eine Datei mit variabler Zeilenanzahl, bestehend aus 2 Zahlenblöcken. So weit,so gut, der linke Bereich tut auch das was er soll, aber in den rechten schleichen sich Kommata ein. Was mache ich falsch.
Der resultierende rechte Zahlenblock MUSS 17 Zeichen beinhalten und sollte in der Ausgabedatei so aussehen:
-Links- -rechts-
0170836622 99290290474861398
0170889964 99733959436375954
0170829462 99101430773709211
statt dessen steht dort, wenn oben CStr(int(99999999999999999 ...
als Ausgabe:
0170889127 1,38709664318077E+16
oder, wenn ich die Zahlenreihe verkürze und einen Teil wie oben, mit "99" dazwischenhänge
0170890159 9956236863111516,3
Wie bekomme ich die Kommata da weg. Was mache ich falsch?
Option Explicit
Const ForReading = 1
Const ForWriting = 2
DIM Shell,FSO,File,Zeile
DIM i,Lesen,Line,Lines
DIM Eingabe,Eingabe1,Eingabe2
Set Shell=CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForReading, True)
Eingabe = InputBox ("Hier Namen eingeben", "Anbieter eingeben")
Eingabe1 = InputBox ("Hier Wert eingeben", "Wertangabe")
Eingabe2 = InputBox ("Hier Menge angeben","Mengenangabe")
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForWriting, True)
Generate_Head
i = 0
For i = 1 to Eingabe2
i = i
'Randomize
Zeile = "01708" & CStr(int((99999 - 23456 + 1) * RND + 23456)) & vbTab & "99" & CStr(int(999999999999999 - 23456 - 1) * RND - 23456)
Zeile = Zeile '& vbNewLine
Lesen.WriteLine Zeile
Next
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForReading, True)
'MsgBox SchreibeInDatei
Function Generate_Head
Dim Line1,Line2,Line3,Line4,Line5,Line6,Line7
Line1 = "*Customer:" & "Telekom" 'Eingabe 'Name per InputBox, alternate fixed input
Line2 = "*date-generated:" & Now 'AktuellesDatum/Zeit
Line3 = "*date-valid-until:" & dateserial(2015-1,12-2,22-11)
Line4 = "*Logo:DOMINO50-OrdNum:001" 'fixed input
Line5 = "*batchnummer:1708" 'or InputBox
Line6 = "*value:" & "50" 'Eingabe1 'or fixed input
Line7 = "*quantity:" & Eingabe2 'or fixed input
Eingabe = Line1 & vbNewLine & _
Line2 & vbNewLine & _
Line3 & vbNewLine & _
Line4 & vbNewLine & _
Line5 & vbNewLine & _
Line6 & vbNewLine & _
Line7 & vbNewLine
Lesen.WriteLine Eingabe
End Function
Function SchreibeInDatei
SchreibeInDatei = Lesen.ReadAll
End Function
Function AktuellesDatum
' FormatDateTime formatiert das Datum als langes Datumsformat.
AktuellesDatum = FormatDateTime(Date, 2)
End Function
Lesen.close
WScript.quit
Der resultierende rechte Zahlenblock MUSS 17 Zeichen beinhalten und sollte in der Ausgabedatei so aussehen:
-Links- -rechts-
0170836622 99290290474861398
0170889964 99733959436375954
0170829462 99101430773709211
statt dessen steht dort, wenn oben CStr(int(99999999999999999 ...
als Ausgabe:
0170889127 1,38709664318077E+16
oder, wenn ich die Zahlenreihe verkürze und einen Teil wie oben, mit "99" dazwischenhänge
0170890159 9956236863111516,3
Wie bekomme ich die Kommata da weg. Was mache ich falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192311
Url: https://administrator.de/forum/vbs-randomize-problem-192311.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
6 Kommentare
Neuester Kommentar
@ Dani
In VBS sind alle Variablen vom Typ "Variant" und können auch nicht anders deklariert werden (und außerdem wäre für "Zeile" hier nur "String" angebracht
) ...
Mit der folgenden Zeile sollte "Zeile" dann eher passen (obwohl damit natürlich auch keine 17 Stellen für den rechten Block garantiert sind):
"
Eine Subtraktion von 23456 nach der Multiplikation könnte zu negativen Ergebnissen führen (und war vermutlich auch nicht so gemeint, daher von mir korrigiert) ...
Eine sicher 17-stellige Kombination aus den Ziffern 0 bis 9 unter Verwendung der Pseudo-Random-Funktion in VBS ließe sich so erhalten:
Um eine führende Null auszuschließen, kann natürlich die erste Stelle mit
vorbelegt und dann noch um 16 weitere Stellen nach obigem Muster ergänzt werden.
Grüße
bastla
In VBS sind alle Variablen vom Typ "Variant" und können auch nicht anders deklariert werden (und außerdem wäre für "Zeile" hier nur "String" angebracht
Mit der folgenden Zeile sollte "Zeile" dann eher passen (obwohl damit natürlich auch keine 17 Stellen für den rechten Block garantiert sind):
Zeile = "01708" & Int((99999 - 23456 + 1) * RND + 23456) & vbTab & "99" & Int((999999999999999 - 23456 + 1) * RND + 23456)
CStr()
" ist unnötig, aber "Int()
" muss natürlich auch bei der zweiten Berechnung auf das Ergebnis (zumindest der Multiplikation) angewendet werden, damit es keine Dezimalstellen geben kann.Eine Subtraktion von 23456 nach der Multiplikation könnte zu negativen Ergebnissen führen (und war vermutlich auch nicht so gemeint, daher von mir korrigiert) ...
Eine sicher 17-stellige Kombination aus den Ziffern 0 bis 9 unter Verwendung der Pseudo-Random-Funktion in VBS ließe sich so erhalten:
Rechts = ""
For i = 1 To 17
Rechts = Rechts & Int(Rnd * 10)
Next
Rechts = Int(Rnd * 9) + 1
Grüße
bastla
[OT]
Moin bastla,
Ja, das Ergebnis geht in die richtige Richtung...
Aber mit dem "Links" und "Rechts" solltest du noch mal überdenken
Lass es uns lieber neutral formulieren.
Sorry, aber die selbstdokumentierende Zeile "Rechts = Rechts & Int(Rnd * 10)" konnte ich nicht so stehen lassen.
Grüße
Biber
[/OT]
Moin bastla,
Rechts = ""
For i = 1 To 17
Rechts = Rechts & Int(Rnd * 10)
Next
Um eine führende Null auszuschließen, kann natürlich die erste Stelle mit
Rechts = Int(Rnd * 9) + 1
vorbelegt und dann noch um 16 weitere Stellen nach obigem Muster ergänzt werden.
Ja, das Ergebnis geht in die richtige Richtung...
Aber mit dem "Links" und "Rechts" solltest du noch mal überdenken
Lass es uns lieber neutral formulieren.
strDigits = Int(Rnd * 9) + 1
For i = 1 To 16
strDigits = strDigits & Int(Rnd * 10)
next
Sorry, aber die selbstdokumentierende Zeile "Rechts = Rechts & Int(Rnd * 10)" konnte ich nicht so stehen lassen.
Grüße
Biber
[/OT]