Top-Themen

Aktuelle Themen (A bis Z)

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

Batch Zufallszahl an jede Zeile hängen

Frage Entwicklung Batch & Shell

Mitglied: Garuga

Garuga (Level 1) - Jetzt verbinden

01.06.2011 um 14:14 Uhr, 5601 Aufrufe, 8 Kommentare

Hi, ich habe nicht wirklich viel Ahnung aber glaube das meine Arbeit mit einem Batch programm etwas leichter werden würde.

Ich habe eine Datei (test.txt) mit mehreren hundert Zeilen. An das ende jeder Zeile soll einfach nur ein string angeheftet werden die wie folgt aufgebaut ist:
" 1 2 3 Zufallszahl_zwischen_Null_und_zwei_PI Zufallszahl_zwischen_Null_und_zwei_PI Zufallszahl_zwischen_Null_und_zwei_PI"

Sieht komplizierter aus als es ist. Daher nochmal kurz in worten wie der String aufgebaut werden soll:
1. ein Leerzeichen anhängen
2. die Zahl 1 anhängen
3. ein Leerzeichen anhängen
4. die Zahl 2 anhängen
5. ein Leerzeichen anhängen
6. die Zahl 3 anhängen
7. ein Leerzeichen anhängen
8. Eine Zufallszahl anhängen die zwischen 0 und 2*PI liegt. (Sollte batch keinen solchen Zufallsgenerator haben(Komma Zahl) geht natürlich auch eine Berechnung in der Art:
Random(0,20000) * 3,14159 / 10000)
9. ein Leerzeichen anhängen
10. Eine ANDERE Zufallszahl anhängen die zwischen 0 und 2*PI liegt.
11. ein Leerzeichen anhängen
12. Eine ANDERE Zufallszahl anhängen die zwischen 0 und 2*PI liegt.


Jede der zufallszahlen soll antürlich neu berechnet werden.
Das wars auch schon

Mit freundlichen Grüßen
Mitglied: Snowman25
01.06.2011 um 15:00 Uhr
Hallo Garuga,

ein paar Verständnisfragen:

Wieviele Nachkommastellen soll diese Zufallszahl haben?
Ist das Komma ein Komma oder ein Punkt?
Hat dein Dokument Leerzeilen, und was soll mit diesen geschehen? Am einfachsten wäre es, sie rausfallen zu lassen

Gruß
Snow
Bitte warten ..
Mitglied: Garuga
01.06.2011 um 15:14 Uhr
Zitat von Snowman25:
Hallo Garuga,

ein paar Verständnisfragen:

Wieviele Nachkommastellen soll diese Zufallszahl haben?
Ist das Komma ein Komma oder ein Punkt?
Hat dein Dokument Leerzeilen, und was soll mit diesen geschehen? Am einfachsten wäre es, sie rausfallen zu lassen

Gruß
Snow

Oha, wenn es so genau geht:
8 Nachkommastellen
Ein Punkt wäre toll
Das Dokument hat keine leerzeilen, lediglich die letzte Zeile ist eine Leerzeile, ob die nun da bleibt oder nicht ist egal, die kann ich per Hand wieder einfügen

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: Snowman25
01.06.2011 um 15:48 Uhr
Hallo Garuga,

probier mal folgendes Skript aus:
01.
@Echo off 
02.
setlocal EnableDelayedExpansion  
03.
set input=test.txt 
04.
set output=out.txt 
05.
set trennzeichen=. 
06.
 
07.
for /F "delims=" %%a in (%input%) do ( 
08.
	set "step=" 
09.
	call :getran 
10.
	set step=%%a 1 2 3 !erg! 
11.
	call :getran 
12.
	set step=!step! !erg! 
13.
	call :getran 
14.
	set step=!step! !erg! 
15.
	Echo !step!>>%output% 
16.
17.
 
18.
 
19.
 
20.
goto :eof 
21.
 
22.
:getran 
23.
set ran=%random%%random% 
24.
set ran=%ran:~0,10% 
25.
 
26.
if %ran% LSS 0 ( 
27.
	set /a ran=%ran% * -1 
28.
29.
 
30.
set /a zwerg=%ran% %% 628318530 
31.
if %zwerg% LSS 0 ( 
32.
	set /a zwerg=%zwerg% * -1 
33.
34.
 
35.
set zwerg=000000000%zwerg% 
36.
set erg=%zwerg:~-9,1%%trennzeichen%%zwerg:~-8,99% 
37.
goto :eof 
38.
 
39.
 
40.
:eof
Hast Glück mit den 8 Nachkommastellen. Mehr kann ich auf diese Weise nämlich garnicht erstellen.
Ich weiss leider nicht, wie gut die Ergebnisse verteilt sind, aber sie sind auf jeden Fall zwischen 0 und 2Pi.
Wie du siehst, war es nicht einfach, die Zahlen passend heraus zu bekommen, da Batch nicht mit Kommazahlen rechnen kann.
Deshalb musste ich mit Vielfachen rechnen, die Zahl als String erweitern und dann entsprechend auseinanderschneiden und wieder zusammenkleben.
Und falls du dich über die Zeilen mit X * -1 wunderst: Die Zahlen sind so groß, dass das erste Bit gelegentlich wechselt und die Zahl negativ wird.

Gruß
Snow
Bitte warten ..
Mitglied: Garuga
01.06.2011 um 15:58 Uhr
Vielen dank snow, geht auf Anhieb!

Was meisnt du damit das du nicht weist wie die Verteilung ist? Leider ist Batch nicht wirklich gut menschenlesbar, aber als grundfunktion scheinst du ja die random funktion von batch zu nutzen, und die sollte doch (hoffentlich) mathematisch korrekte zufallsverteilung liefern.
Bitte warten ..
Mitglied: Snowman25
01.06.2011 um 16:11 Uhr
Die Funktion, die eine Zufallszahl für %random% auswirft, erzeugt schon relativ gut verteilte Ergebnisse:
13941	25445	9323	25733	19111 
21797	11884	27142	3038	26515 
4905	3316	16349	17526	9251 
11361	3777	25478	27133	7925 
25316	31429	9089	17887	2 
18707	13796	19473	5530	28413
Bloß kann ich dir nicht sagen, wie es um die gleichmäßige Verteilung meines Algorithmus steht.
Um in dir mal zu erklären:
  1. 2 %random%-Zahlen werden hintereinandergeschrieben und dann auf 10 Zahlen gekürzt.
  2. Sollte das Ergebnis aus irgendeinem Grund negativ sein, wird es positiv gemacht.
  3. Jetzt wird dieser Wert mit 62831853 (2*Pi*100.000.000) Modulo gerechnet
  4. Sollte das Ergebnis aus irgendeinem Grund negativ sein, wird es positiv gemacht.
  5. Jetzt werden vorne mehrere Nullen angehängt, um eine Mindestlänge zu garantieren
  6. Dann wird die 9. Ziffer von hinten, ein Trennzeichen und die restlichen Zahlen in eine Variable geschrieben, welche unser Endergebnis darstellt.

Auf Grund dessen kann ich keine valide Zufallsverteilung garantieren.
Bitte warten ..
Mitglied: Garuga
01.06.2011 um 16:16 Uhr
OK, verstehe das vorgehen, und bei einer sehr langen datei kam es zu folgender fehlermeldung:

"ungültige Zahl". Zahlen sind begrenzt auf eine Genauigkeit von 32 bits


Wäre es leichter, wenn du die genauigkeit auf 6 stellen machst? Und anscheinend verarbeitet mein Rechner die zahlen zu schnell, denn es kommen öfters zahlen doppelt vor, hier ein kleiner ausschnitt:

... 1 2 3 1.38776408 0.94693388 0.94693388
... 1 2 3 0.94693388 1.59142789 1.59142789
... 1 2 3 2.03932151 2.03932151 2.03932151

Kann man da eine pause einbauen? Ich denke er nimmt als grundsatz irgendeine zeitrechnung und kommt daher auf stets gleiche werte.
Bitte warten ..
Mitglied: Snowman25
01.06.2011 um 16:25 Uhr
Die Verzögerung ist einfach zu realisieren. Genauso wie die Reduzierung auf 6 Nachkommastellen. Hier die neue Version:

01.
@Echo off 
02.
setlocal EnableDelayedExpansion  
03.
set input=test.txt 
04.
set output=out.txt 
05.
set trennzeichen=. 
06.
 
07.
for /F "delims=" %%a in (%input%) do ( 
08.
	set "step=" 
09.
	call :getran 
10.
	set step=%%a 1 2 3 !erg! 
11.
	call :getran 
12.
	set step=!step! !erg! 
13.
	call :getran 
14.
	set step=!step! !erg! 
15.
	Echo !step!>>%output% 
16.
17.
 
18.
 
19.
 
20.
goto :eof 
21.
 
22.
:getran 
23.
ping -n 1 localhost>nul 
24.
set ran=%random%%random% 
25.
set ran=%ran:~0,8% 
26.
 
27.
if %ran% LSS 0 ( 
28.
	set /a ran=%ran% * -1 
29.
30.
 
31.
set /a zwerg=%ran% %% 6283185 
32.
if %zwerg% LSS 0 ( 
33.
	set /a zwerg=%zwerg% * -1 
34.
35.
 
36.
set zwerg=000000000%zwerg% 
37.
set erg=%zwerg:~-7,1%%trennzeichen%%zwerg:~-6,99% 
38.
goto :eof 
39.
 
40.
 
41.
:eof
Achtung! Das Skript braucht jetzt wesentlich länger! Ich kann die Verzögerung aber leider schlecht kontrollierbar kleiner machen. Aber das sollte ja kein Problem sein.

Gruß
Snow
Zitat von: Garuga
Edit: Ist es nicht einfacher meine Methode zur berehcnung zu nehmen?
Zufall = Random(0,20000)
Zahl = Zufall*PI/10000

damit hätte man bereits eine genauigkeit von 5 stellen und eine verteilung die exakt so ist wie die der random funktion oder?

Leider gibt es keine echte Random-funktion, ich kann bloß den Wert der %random%-Variable abgreiffen, welchen ich nicht beeinflussen kann.
Aber ein kurzer Blick über die Ergebnisse scheint zu bestätigen, dass die Werte gut verteilt sind.
Bitte warten ..
Mitglied: Garuga
01.06.2011 um 16:31 Uhr
Super danke, funktioniert und keine doppelten zahlen mehr wie es aussieht.

Danke vielmals, hast mir eine Menge Handarbeit gespart!

Mit freundlichen Grüßen
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Zufallszahl begrenzen!
gelöst Frage von FrexedBatch & Shell2 Kommentare

Hallo Leute, Ich möchte in folgendem Code ein Problem lösen. (Eine Zufallszahl begrenzen, z.B.: Die Kommandozeile soll eine Zufallzahl ...

Batch & Shell
Batch bleibt hängen - wie kann die Batch neugestartet werden?
gelöst Frage von dax4funBatch & Shell6 Kommentare

Hi Leute , wieder ein Sonderfall habe eine Batch ständig am rennen im Hintergrund doch irgendwann bleibt sie hängen ...

Batch & Shell
Wie ändert eine batch eine bestimmte zeile in einer anderen batch
Frage von J4YK0BBatch & Shell3 Kommentare

Wie schreibt eine batch eine andere batch um, aber nur eine SPEZIELLE zeile? Das System ist wiefolgt. Man gibt ...

Batch & Shell
Mit batch zeilen auslesen
gelöst Frage von keksegrillerBatch & Shell2 Kommentare

Hallihallo, ich fange gerade an mit batch-Dateien zu arbeiten und komme trotz stundenlangem ausprobieren und googlen leider nicht mehr ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.