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 ###
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]
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
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
EndSwitch
WEnd
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
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
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
EndFunc
[/autoit]Beispieldaten:
[autoit]
05a-Max-Mustermann
05b-Gisela-Autoit
06c-Hans-Werner
12-Hannelore-Kraft
Achja: Für weitere Hilfe am Skript wäre ich natürich dankbar!