PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : array in mirc ??


Falke36
12.06.2002, 22:19
Ich hab mal wieder eine frage:

Ich möchte die zahlen von 1 bis 100 durch zufall 'scrambeln' lassen. Ist das in mirc möglich ?

Falke


Codeq
12.06.2002, 22:23
durch zufall klättern lassen??

also für zufall gibts
$rand(n,m) wobei n die erste zahl darstellt und m die letzte
hier also
$rand(0,100)

und arrays ?! najo kannst leider nur mit token arbeiten.. schreibst dir alles was du brauchst in einen variable aber die elemente jeweils mit einem eindeutigen zeichen getrennt
und benutzt zum zugreifen $gettok()
oder /tokenize
dabei kannste aber nur auf 1-9 Token zugreifen.. bei 100 musst du wohl $gettok() benutzen...

wenn grosse datenmenegen bearbeitet werden sollen, dann empfhele ich hashtables...

sag ma genauer plz was du vor hast..

Falke36
13.06.2002, 11:26
danke für die Hilfe,

ich möchte im Prinzip eine ini-datei mit 100 einträgen auselesen.
Da bei dem zufallsprinzip mit $rand die zahlen zu oft wiederholt werden, möchte ich die reihenfolgen vorher festlegen, in welcher Reihenfolge die Datei ausgelesen wird.

Felix Kaiser
13.06.2002, 16:17
Dann machs wie folgend: In einer Schleife (while) setzt du mit Leerzeichen getrennt die Zahlen 1 bis 100 aneinander. Dann in einer weiteren Schleife ermittelst du immer 2 Zahlen von 1 bis 100 und vertauschst diese Elemente in der Aneinanderreihung. Somit hast du alle Zahlen 1 bis 100 in zufälliger Reihenfolge. Prinzip verstanden? Zum Erzeugen der 100 Zahlen kannst du $addtok() verwenden, zum Auslesen eines Werten $gettok() und zum Ersetzen eines Wertes $reptok().

Codeq
13.06.2002, 21:40
und so könnte das dann aussehen




alias doit {
;nimmt per zufall eine Zahl aus %start bis %ende, wobei keine Zahl innerhalb
; eines Durchlaufs zwei mal auftaucht. Es dürfen alles nur Integer werte sein!
var %file c:\temp.txt
var %start -13
var %ende 20

if (%start <= %ende) {
var %while.i 1
if (%start > 0) { var %while.j $calc($abs(%ende) - $abs(%start) + 1) }
else { var %while.j $calc($abs(%start) + $abs(%ende) + 1) }
var %string
while (%while.i <= %while.j ) {
if (%start == 0) { var %string $addtok(%string,$calc(%while.i - 1),44) }
else if (%start > 0) { var %string $addtok(%string,$calc(%while.i + $abs(%start) - 1),44) }
else { var %string $addtok(%string,$calc(%while.i - $abs(%start) - 1),44) }
inc %while.i
}

var %while.i $numtok(%string,44)

while (%while.i > 0) {
var %rand $rand(1,$calc(%while.i))
echo -a $read(text.txt,$gettok(%string,$calc(%rand),44))
var %string $deltok(%string,$calc(%rand),44)
var %while.i $numtok(%string,44)
}
}
}

Codeq
14.06.2002, 00:17
kleiner bugfix
die zahlen können nun auch negativ und oder postitiv sein, einzige bedingung ist, das %start <= %ende ist.
und optimierung im source ich brauch nun nurnoch eine formel um alle zahlen von %start bis %ende in einen %string zu schreiben.


alias doit {
;nimmt per zufall eine Zahl aus %start bis %ende, wobei keine Zahl innerhalb
; eines Durchlaufs zwei mal auftaucht. Es dürfen alles nur Integer werte sein!
var %file c:\temp.txt
var %start 10
var %ende 20

if (%start <= %ende) {
var %while.i 1
var %while.j $calc($abs($calc((%ende * -1) + %start)) + 1)
var %string
while (%while.i <= %while.j ) {
var %string $addtok(%string,$calc(%start + %while.i - 1),44)
inc %while.i
}
while ($numtok(%string,44) > 0) {
var %rand $rand(1,$numtok(%string,44))
echo -a $read(%file,$gettok(%string,$calc(%rand),44))
var %string $deltok(%string,$calc(%rand),44)
}
}
}