Hilfe, Skript zum auslesen und eintragen von Schülern für Projektkurse

  • Hallo miteinander,

    Ich wurde gefragt ob ich für meine Schule ein kleines Progrämmchen schreibe, in dem Schüler ( rund. 700) in ca. 60 Projekte eingeteilt werden. Man konnte in den letzten Tagen wählen und 3 Prioritäten aufschreiben. Diese Zettel müssten nun ausgewertet werden. Da komme ich ins Spiel: Ich habe eine GUI wo der jeweiige Name angezeigt wird und man in 3 Inputfeldern die Wahl eintragen kann. Die Schüler kommen nach dem Zufallsprinzip, wobei ich das noch Klassenmäßig gestalten möchte (erspart die Rumsucherei).

    Ich habe 2 Txt. Dateien: Schülertxt enthält alle Namen und Stufen der Schüler nach dem Aufbau: 05a-Mustermann-Max

    Die andere TXT Datei läd die Projekte.

    Nun habe ich 60 TXT Dateien mit den Projekttiteln in Zeile 1 sowie die max. Anzahl an Schüler für die Kapazität. Diese sind folgendermaßen Aufgebaut: Arbeiten mit Holz-15
    Sie tragen Titel von 01 bis 60.
    Man wählt nämlich nur die Nummer des Projektes aus Bequemichkeitsgründen. Also wenn ich das Projekt 01 as 1. Priorität hab wird in der 01.txt geprüft ob dort noch Platz ist usw.

    Mein Trennungszeichen ist immer das "-".

    Nun scheitere ich an einem einfachen Array:

    Hier der ganze Code vom Skript:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Schülerselektion Projekttage v.1.0 BETA", 628, 406, 362, 443)
    $Edit1 = GUICtrlCreateEdit("", 56, 8, 185, 89, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "")
    $Input1 = GUICtrlCreateInput("", 56, 112, 185, 21)
    $Input2 = GUICtrlCreateInput("", 56, 144, 185, 21)
    $Input3 = GUICtrlCreateInput("", 56, 176, 185, 21)
    $Edit2 = GUICtrlCreateEdit("", 288, 8, 329, 297, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "")
    $Label1 = GUICtrlCreateLabel("Name:", 8, 32, 35, 17)
    $Label2 = GUICtrlCreateLabel("Wahl1:", 8, 112, 38, 17)
    $Label3 = GUICtrlCreateLabel("Wahl2:", 8, 144, 38, 17)
    $Label4 = GUICtrlCreateLabel("Wahl3:", 8, 176, 38, 17)
    $Group1 = GUICtrlCreateGroup("Erweiterte Einstellung", 8, 208, 273, 57)
    $Checkbox1 = GUICtrlCreateCheckbox("Projektleiter", 16, 232, 129, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Nächster Schüler", 168, 272, 107, 25)
    $Edit3 = GUICtrlCreateEdit("", 8, 312, 609, 81, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "Fehlerprotokol")
    $Button2 = GUICtrlCreateButton("Liste laden", 8, 272, 155, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $message_projekte = "Liste der Projekte"
    Global $fehlerprotokoll = "Die Datei konnte nicht geladen werden!"
    Global $fehlerladen = "Die Datei konnte nicht gelesen werden und ist möglicherweise Fehlerhaft und/oder leer!"
    Global $i = 1
    Global $member2
    Global $member3
    Global $member
    Local $anzahl [1][2]
    Local $anzahl2 [1][2]
    Local $anzahl3 [1][2]

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    $projekte = FileOpenDialog($message_projekte,@ScriptDir & "\","Textdokumente (*.txt)","","Projekte_FSG.txt")
    $projekt_anzahl = _FileCountLines($projekte)
    $projekte_namen = FileRead($projekte)
    If @error = -1 Then
    GUICtrlSetState($Edit3,$fehlerladen)
    EndIf
    GUICtrlSetData($Edit2,$projekte_namen)
    $schuelerpfad = FileOpenDialog("Liste der Schüler!",@ScriptDir & "\","Textdokumente (*.txt)","","Schüler.txt")
    $schueleranzahl = _FileCountLines($schuelerpfad)
    MsgBox(0,"Hinweis","Es wurden "&$schueleranzahl&" Schüler/innen gefunden sowie "&$projekt_anzahl&" Projekte!")
    _Schuelerladen()
    Case $Button1
    $Line = Random(1,$schueleranzahl,1)
    $Name = FileReadLine($schuelerpfad,$line)
    $array = StringSplit($Name, "-",1)
    GUICtrlSetData($Edit1,"Stufe: " & $array[1] & @CRLF & "Name: "& $array[2]& @CRLF & "Vorname: " & $array[3])
    $wahl1 = GUICtrlRead($Input1)
    $wahl2 = GuiCtrlRead($Input2)
    $wahl3 = GUICtrlRead($Input3)
    $datei_wahl1 = FileReadLine(@ScriptDir & "\Projekte/" & $wahl1&".txt",1)
    $anzahl_wahl1 = StringSplit($datei_wahl1,"-",1)
    $anzahl_vorhanden = _FileCountLines(@ScriptDir & "\Projekte/" & $wahl1&".txt")
    $wahre_mitglieder = $anzahl_vorhanden - 1

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

    If not $anzahl_wahl1[2] >= $wahre_mitglieder Then
    $line = $anzahl_vorhanden + 1
    _FileWriteToLine(@ScriptDir & "\Projekte/" & $wahl1&".txt",$line,$array[2] & " " & $array[3])
    Else
    _func2()
    EndIf

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

    EndSwitch
    WEnd

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

    Func _Schuelerladen()
    $Line = Random(1,$schueleranzahl,1)
    $Name = FileReadLine($schuelerpfad,$line)
    $array = StringSplit($Name, "-",1)
    GUICtrlSetData($Edit1,"Stufe: " & $array[1] & @CRLF & "Name: "& $array[2]& @CRLF & "Vorname: " & $array[3])
    EndFunc

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

    Func _func2()
    $datei_wahl2 = FileReadLine(@ScriptDir & "\Projekte/" & $wahl2&".txt",1)
    $anzahl_wahl2 = StringSplit($datei_wahl2,"-",1)
    $anzahl_vorhanden2 = _FileCountLines(@ScriptDir & "\Projekte/" & $wahl2&".txt")
    $wahre_mitglieder2 = $anzahl_vorhanden2 - 1
    If not $anzahl_wahl2[2] = $wahre_mitglieder Then
    $line2 = $anzahl_vorhanden2 + 1
    _FileWriteToLine(@ScriptDir & "\Projekte/" & $wahl2&".txt",$line,$array[2] & " " & $array[3])
    Else
    _func3()
    EndIF

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

    EndFunc

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

    Func _func3()
    $datei_wahl3 = FileReadLine($wahl3&".txt",1)
    $anzahl_wahl3 = StringSplit($datei_wahl3,"-",1)
    $anzahl_vorhanden3 = _FileCountLines(@ScriptDir & "\Projekte/" & $wahl3&".txt")
    $wahre_mitglieder3 = $anzahl_vorhanden3 - 1
    If not $anzahl_wahl3[2] = $wahre_mitglieder3 Then
    $line3 = $anzahl_vorhanden3 + 1
    _FileWriteToLine(@ScriptDir & "\Projekte/" & $wahl3&".txt",$line3,$array[2] & " " & $array[3])
    Else
    MsgBox(16,"Achtung", "Für den/die Schüler/in: " & $array[3] & " " & $array[2] & " konnte keine Priorität erfüllt werden!")
    EndIf

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

    EndFunc

    [/autoit]


    Beispieldaten:

    [autoit]


    05a-Max-Mustermann
    05b-Gisela-Autoit
    06c-Hans-Werner
    12-Hannelore-Kraft

    [/autoit]

    Achja: Für weitere Hilfe am Skript wäre ich natürich dankbar! :)

  • Ich glaube es geht um folgende Fehlermeldung:

    Zitat

    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\[ZENSIERT]\Desktop\Test-Datei.au3"
    C:\Users\[ZENSIERT]\Desktop\Test-Datei.au3 (92) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    GUICtrlSetData($Edit1,"Stufe: " & $array[1] & @CRLF & "Name: "& $array[2]& @CRLF & "Vorname: " & $array[3])
    GUICtrlSetData($Edit1,"Stufe: " & $array[1] & @CRLF & "Name: "& ^ ERROR
    >Exit code: 1 Time: 36.052

    *g* ich sehe mir das auch mal an ^^

    PS: Klickt man auf "Nächsten Schüler" und man hat vergessen ein Feld auszufüllen, so schließt sich das Programm ^^ Da solltest du was dran machen :P So schonmal als hinweis x)

    2 Mal editiert, zuletzt von Yjuq (23. Dezember 2012 um 01:10)