Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS randomize Problem

Frage Entwicklung VB for Applications

Mitglied: abeisema

abeisema (Level 1) - Jetzt verbinden

05.10.2012, aktualisiert 22:21 Uhr, 2236 Aufrufe, 6 Kommentare

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.

01.
Option Explicit 
02.
Const ForReading = 1 
03.
Const ForWriting = 2 
04.
DIM Shell,FSO,File,Zeile 
05.
DIM i,Lesen,Line,Lines 
06.
DIM Eingabe,Eingabe1,Eingabe2 
07.
 
08.
Set Shell=CreateObject("WScript.Shell") 
09.
Set FSO = CreateObject("Scripting.FileSystemObject") 
10.
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForReading, True) 
11.
Eingabe = InputBox ("Hier Namen eingeben", "Anbieter eingeben") 
12.
Eingabe1 = InputBox ("Hier Wert eingeben", "Wertangabe") 
13.
Eingabe2 = InputBox ("Hier Menge angeben","Mengenangabe") 
14.
 
15.
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForWriting, True) 
16.
 
17.
Generate_Head 
18.
 
19.
i = 0 
20.
For i = 1 to Eingabe2 
21.
i = i 
22.
'Randomize 
23.
Zeile = "01708" & CStr(int((99999 - 23456 + 1) * RND + 23456)) & vbTab & "99" & CStr(int(999999999999999 - 23456 - 1) * RND - 23456) 
24.
Zeile = Zeile '& vbNewLine 
25.
Lesen.WriteLine Zeile 
26.
Next 
27.
 
28.
Set Lesen = FSO.OpenTextFile("c:\Temp\PrepaidImport.txt", ForReading, True) 
29.
'MsgBox SchreibeInDatei 
30.
 
31.
Function Generate_Head 
32.
Dim Line1,Line2,Line3,Line4,Line5,Line6,Line7 
33.
Line1 = "*Customer:" & "Telekom" 'Eingabe   'Name per InputBox, alternate fixed input  
34.
Line2 = "*date-generated:" & Now 'AktuellesDatum/Zeit 
35.
Line3 = "*date-valid-until:" & dateserial(2015-1,12-2,22-11)  
36.
Line4 = "*Logo:DOMINO50-OrdNum:001" 'fixed input 
37.
Line5 = "*batchnummer:1708"      'or InputBox 
38.
Line6 = "*value:" & "50" 'Eingabe1	 'or fixed input 
39.
Line7 = "*quantity:" & Eingabe2  'or fixed input 
40.
Eingabe = Line1 & vbNewLine & _ 
41.
Line2 & vbNewLine & _ 
42.
Line3 & vbNewLine & _ 
43.
Line4 & vbNewLine & _ 
44.
Line5 & vbNewLine & _ 
45.
Line6 & vbNewLine & _ 
46.
Line7 & vbNewLine 
47.
Lesen.WriteLine Eingabe 
48.
End Function 
49.
 
50.
Function SchreibeInDatei 
51.
SchreibeInDatei = Lesen.ReadAll 
52.
End Function 
53.
 
54.
Function AktuellesDatum 
55.
   ' FormatDateTime formatiert das Datum als langes Datumsformat. 
56.
   AktuellesDatum = FormatDateTime(Date, 2) 
57.
End Function 
58.
Lesen.close 
59.
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?
Mitglied: Dani
05.10.2012 um 20:34 Uhr
Moin,
ich bin grad nicht sicher, aber gibts in VBS auch Datentypen. Denn dann würde ich als Typ für "Zeile" -> "Currency" versuchen.


Grüße,
Dani
Bitte warten ..
Mitglied: bastla
05.10.2012, aktualisiert um 22:00 Uhr
@ 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):
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:
01.
Rechts = "" 
02.
For i = 1 To 17 
03.
    Rechts = Rechts & Int(Rnd * 10) 
04.
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.

Grüße
bastla
Bitte warten ..
Mitglied: Dani
05.10.2012 um 21:58 Uhr
@bastla
Arr, hab ich das mit VB verwechselt? Sorry für die Fehlinfo.


Grüße,
Dani
Bitte warten ..
Mitglied: abeisema
06.10.2012 um 22:06 Uhr
Hallo bastla,

vielen Dank für die schnelle Hilfe.

gruss
Andreas
Bitte warten ..
Mitglied: Biber
07.10.2012, aktualisiert um 00:59 Uhr
[OT]

Moin bastla,

Zitat von bastla:
01.
Rechts = "" 
02.
 For i = 1 To 17 
03.
     Rechts = Rechts & Int(Rnd * 10) 
04.
 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.
01.
strDigits = Int(Rnd * 9) + 1 
02.
For i = 1 To 16 
03.
    strDigits = strDigits & Int(Rnd * 10) 
04.
next
Sorry, aber die selbstdokumentierende Zeile "Rechts = Rechts & Int(Rnd * 10)" konnte ich nicht so stehen lassen.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
07.10.2012 um 10:09 Uhr
[OT] Hallo Biber!

Hast ja recht - das war zu stark verkürzt; eigentlich hätte die Variable besser "RechterZahlenblock" (oder vielleicht "RechterTeilDerZeileNachDemTab" ) heißen sollen ...

Grüße
bastla
[/OT]
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Multimedia & Zubehör
BENQ Beamer Fernbedingung Frequenz Problem (2)

Frage von xbast1x zum Thema Multimedia & Zubehör ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Windows Server
Google Chrome Web Store Problem auf Terminal Farm

Frage von dakoerry zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...