Zufallsauswahl aus Datei

  • Hallo Leute,
    ich habe folgendes Problem. Ich möchte aus einer txt-Datei die Einträge in inputboxen zufällig ausgeben. An sich nicht problematisch, allerdings sind es sieben inputboxen und nur vier Einträge in der Datei. Diese sollen aber in alle sieben inputboxen einfügbar sein, was bei mir nur funktioniert wenn ich die acht (verschiedene) Einträge in der Datei mache.
    (z.B. new.txt mit den Einträgen)
    Gast 1
    Gast 2
    Gast 3
    Gast 4
    5
    6
    7
    8
    und hier mein Beispiel-Quellcode:

    Spoiler anzeigen
    [autoit]

    #include <GuiButton.au3>
    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Form1 = GUICreate('Test', 440, 220,-1,-1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $button = GUICtrlCreateButton('',400,0,40,40,$BS_ICON)
    _GUICtrlButton_SetImage(-1, "shell32.dll", 135, True)

    [/autoit] [autoit][/autoit] [autoit]

    Global $edit1 = GUICtrlCreateInput('',115,20,60,18,$ES_CENTER)
    Global $edit2 = GUICtrlCreateInput('',175,20,60,18,$ES_CENTER)
    Global $edit3 = GUICtrlCreateInput('',115,40,60,18,$ES_CENTER)
    Global $edit4 = GUICtrlCreateInput('',175,40,60,18,$ES_CENTER)
    Global $edit5 = GUICtrlCreateInput('',115,60,60,18,$ES_CENTER)
    Global $edit6 = GUICtrlCreateInput('',175,60,60,18,$ES_CENTER)
    Global $edit7 = GUICtrlCreateInput('',115,80,60,18,$ES_CENTER)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel('Tisch 1:',15,22)
    GUICtrlCreateLabel('Tisch 2:',15,42)
    GUICtrlCreateLabel('Tisch 3:',15,62)
    GUICtrlCreateLabel('Tisch 4:',15,82)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _END()
    Case $button
    _read()

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _read()
    if FileExists("new.txt") Then
    FileCopy("new.txt",@TempDir&"\db.tmp",1)
    For $i = 0 To 6
    Local $file=FileOpen(@TempDir&"\db.tmp",0)
    Local $txt = @TempDir&"\db.tmp"
    Local $iLines = _FileCountLines($txt)
    Local $iNumber = Random(1,$iLines)
    Local $key = FileReadLine($txt, $iNumber)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($edit1+$i, $key)
    Local $sRepl = $key&@crlf
    Local $sText = FileRead($file)
    Local $sNewText = StringReplace($sText, $sRepl,"")
    FileClose($file)
    FileDelete(@TempDir&'\db.tmp')
    FileWrite(@TempDir&'\db.tmp', $sNewText)
    Next
    EndIf
    EndFunc
    Func _END()
    FileDelete(@TempDir&'\db.tmp')
    Exit
    EndFunc

    [/autoit]


    Vielleicht habt ihr eine Idee, was ich verbessern kann.
    Gruß Gremlin

    Edit Oscar: Bitte bei längeren Quelltexten zusätzlich zu dem AutoIt-Tag auch den Spoiler-Tag verwenden. Habe ich jetzt hier mal eingefügt.

    2 Mal editiert, zuletzt von Gremlin78 (29. August 2013 um 19:46)

    • Offizieller Beitrag

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    #include <GuiButton.au3>
    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Form1 = GUICreate('Test', 440, 220, -1, -1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $button = GUICtrlCreateButton('', 400, 0, 40, 40, $BS_ICON)
    _GUICtrlButton_SetImage(-1, "shell32.dll", 135, True)

    [/autoit] [autoit][/autoit] [autoit]

    Global $edit[7]
    $edit[0] = GUICtrlCreateInput('', 115, 20, 60, 18, $ES_CENTER)
    $edit[1] = GUICtrlCreateInput('', 175, 20, 60, 18, $ES_CENTER)
    $edit[2] = GUICtrlCreateInput('', 115, 40, 60, 18, $ES_CENTER)
    $edit[3] = GUICtrlCreateInput('', 175, 40, 60, 18, $ES_CENTER)
    $edit[4] = GUICtrlCreateInput('', 115, 60, 60, 18, $ES_CENTER)
    $edit[5] = GUICtrlCreateInput('', 175, 60, 60, 18, $ES_CENTER)
    $edit[6] = GUICtrlCreateInput('', 115, 80, 60, 18, $ES_CENTER)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel('Tisch 1:', 15, 22)
    GUICtrlCreateLabel('Tisch 2:', 15, 42)
    GUICtrlCreateLabel('Tisch 3:', 15, 62)
    GUICtrlCreateLabel('Tisch 4:', 15, 82)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _END()
    Case $button
    _read()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _read()
    Local $sFilename = @ScriptDir & '\new.txt', $iRandom, $aTable[UBound($edit)]
    For $i = 0 To UBound($aTable) - 1
    GUICtrlSetData($edit[$i], '')
    $aTable[$i] = $i
    Next
    If FileExists($sFilename) Then
    $aGuest = StringSplit(FileRead($sFilename), @CRLF, 3)
    For $i = 0 To UBound($aGuest) - 1
    $iRandom = Random(0, UBound($aTable) - 1 - $i, 1)
    GUICtrlSetData($edit[$aTable[$iRandom]], $aGuest[$i])
    $aTable[$iRandom] = $aTable[UBound($aTable) - 1 - $i]
    Next
    EndIf
    EndFunc ;==>_read

    [/autoit] [autoit][/autoit] [autoit]

    Func _END()
    Exit
    EndFunc ;==>_END

    [/autoit]