Guten Tag/Abend
Also:
Ich hab mich wiedermal an einer neuen Variablenskripterei versucht...
Leider ist es auch beim Versuch geblieben.
Ich vermute das Problem ist, dass ich einfach den Überblick verloren habe.
Das Skript verfügt zwar über eine Legende, trotzdem möchte ich hier nocheinmal die Funktion des Skriptes erläutern.
Eigentlich ist es ja nicht nur ein Skript, das eine Rolle spielt.
Es sind eher zwei.
Das erste ist ein Tool mit welchem Fragen und Antworten für eine Art "Quiz" manuell eingetragen werden können. Warum? Damit jeder der mit dem "Quiz" lernen möchte auch seine eigenen Fragen und Antworten zum Standardcontent dazufügen können.
Skript Nummer 1:
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
$hGui = GUICreate("Includer", 490, 114, 192, 124)
$Frage = GUICtrlCreateInput("Frage", 8, 16, 473, 21)
$Antwort = GUICtrlCreateInput("Antwort", 8, 48, 225, 21)
$bInclude = GUICtrlCreateButton("Include", 240, 48, 89, 25)
;~ DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ;To set the ProgressBar to WindowsKlassikStile
$pB = GUICtrlCreateProgress(8, 80, 321, 25)
$rV = GUICtrlCreateRadio("Violine", 344, 56, 57, 17)
$rkB = GUICtrlCreateRadio("kl. Bratsche", 400, 56, 81, 17)
$rgB = GUICtrlCreateRadio("gr. Bratsche", 400, 80, 81, 17)
$rC = GUICtrlCreateRadio("Cello", 344, 80, 49, 17)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $bInclude
Global $r1Read = GUICtrlRead($rV), $r2Read = GUICtrlRead($rkB), $r3Read = GUICtrlRead($rgB), $r4Read = GUICtrlRead($rC)
For $i = 0 To $r4Read -1
$r1Read = GUICtrlRead($rV)
Next
Select
Case $r1Read = 1
$fRead = GUICtrlRead($Frage)
$aRead = GUICtrlRead($Antwort)
DirCreate(".\Violine")
FileWriteLine(".\Violine\aVioline.txt",$aRead)
FileWriteLine(".\Violine\fVioline.txt",$fRead)
Case $r2Read = 1
$fRead = GUICtrlRead($Frage)
$aRead = GUICtrlRead($Antwort)
DirCreate(".\kl. Bratsche")
FileWriteLine(".\kl. Bratsche\akl. Bratsche.txt",$aRead)
FileWriteLine(".\kl. Bratsche\fkl. Bratsche.txt",$fRead)
Case $r3Read = 1
$fRead = GUICtrlRead($Frage)
$aRead = GUICtrlRead($Antwort)
DirCreate(".\gr. Bratsche")
FileWriteLine(".\gr. Bratsche\agr. Bratsche.txt",$aRead)
FileWriteLine(".\gr. Bratsche\fgr. Bratsche.txt",$fRead)
Case $r4Read = 1
$fRead = GUICtrlRead($Frage)
$aRead = GUICtrlRead($Antwort)
DirCreate(".\Cello")
FileWriteLine(".\Cello\aCello.txt",$aRead)
FileWriteLine(".\Cello\fCello.txt",$fRead)
EndSelect
Do
$pRead = GUICtrlRead($pB)
GUICtrlSetData($pB, $pRead + 25)
Tooltip("Loading")
Sleep(60)
Tooltip("Loading.")
Sleep(60)
Tooltip("Loading..")
Sleep(60)
Tooltip("Loading...")
Sleep(60)
Tooltip("Loading..")
Sleep(60)
Tooltip("Loading.")
Sleep(60)
Until $pRead = 100
ToolTip("Ready")
Sleep(100)
ToolTip("")
EndSwitch
WEnd
Wie sicher einige sofort erkennen, ist der Ladebalken reine Zirde....
Was macht das Skript:
Es schreibt die in die Inputboxen eingegeben Daten mittels FileWriteLine in den jeweiligen Ordner des Instruments und sortiert nach Fragen und Antworten.
Dann sind wir auch schon bei Skript Nummer 2:
Spoiler anzeigen
#Region=========================== Legende ======================================
;Der Buchstabe "a" am Anfang einer Variable steht immer für "Antwort"
;Bei den Bratschenvariablen steht immer ein "kl" oder "gr" am Anfang. Das steht für "kleine Bratsche" oder "große Bratsche". Nötig, da es von Bratschen zwei verschiedene "Standardgrößen" gibt.
;aklBratsche bedeutet also: Antworten für kleine Bratschen
;agrBratsche (siehe -1)
;aViolin = Eine Liste aller Antworten welche im Ordner ".\Violin" in der "aVioline.txt" - Datei gespeichert sind.
;Das selbe gibt es nun natürlich auch mit den "Fragen". Der Ablauf ist der gleiche.
[/autoit] [autoit][/autoit] [autoit];i am Anfang einer Variable steht bei mir für Index. Hier habe ich versucht, die Anzahl der Fragen und Antworten auszulesen. Dies wir für das erstellen des letzten Arrays(Zweidimensional) benötigt.
[/autoit] [autoit][/autoit] [autoit];af steht für "Antwort und Frage". Das ist die Variable für das letzte Array.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];Die Daten für das Array werden wie schon gesagt aus Textdateien ausgelesn. Diese werden mittels einem externen Programmes geschrieben. Dieses funktioniert mit zwei Inputboxen und speichert die Antworten und Fragen auch gleich in die entsprechenden Ordner.
#EndRegion======================== Legende ======================================
;===========================Include==============================
#include <array.au3>
#include <file.au3>
;===========================Antworten=============================
Global $aViolin, $aklBratsche, $agrBratsche, $aCello
If Not _FileReadToArray(".\Violine\aVioline.txt",$aViolin) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\Violine\aVioline.txt")
Exit
EndIf
For $x = 1 to $aViolin[0]
ConsoleWrite($aViolin[$x]&@Crlf)
Next
If Not _FileReadToArray(".\kl. Bratsche\akl. Bratsche.txt",$aklBratsche) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\kl. Bratsche\akl. Bratsche.txt")
Exit
EndIf
For $x = 1 to $aklBratsche[0]
ConsoleWrite($aklBratsche[$x]&@Crlf)
Next
If Not _FileReadToArray(".\gr. Bratsche\agr. Bratsche.txt",$agrBratsche) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\gr. Bratsche\agr. Bratsche.txt")
Exit
EndIf
For $x = 1 to $agrBratsche[0]
ConsoleWrite($agrBratsche[$x]&@Crlf)
Next
If Not _FileReadToArray(".\Cello\aCello.txt",$aCello) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\Cello\aCello.txt")
Exit
EndIf
For $x = 1 to $aCello[0]
ConsoleWrite($aCello[$x]&@Crlf)
Next
;===========================Fragen=============================
Global $fViolin, $fklBratsche, $fgrBratsche, $fCello
If Not _FileReadToArray(".\Violine\fVioline.txt",$fViolin) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\Violine\fVioline.txt")
Exit
EndIf
For $x = 1 to $fViolin[0]
ConsoleWrite($fViolin[$x]&@Crlf)
Next
If Not _FileReadToArray(".\kl. Bratsche\fkl. Bratsche.txt",$fklBratsche) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\kl. Bratsche\fkl. Bratsche.txt")
Exit
EndIf
For $x = 1 to $fklBratsche[0]
ConsoleWrite($fklBratsche[$x]&@Crlf)
Next
If Not _FileReadToArray(".\gr. Bratsche\fgr. Bratsche.txt",$fgrBratsche) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\gr. Bratsche\fgr. Bratsche.txt")
Exit
EndIf
For $x = 1 to $fgrBratsche[0]
ConsoleWrite($fgrBratsche[$x]&@Crlf)
Next
If Not _FileReadToArray(".\Cello\fCello.txt",$fCello) Then
MsgBox(4096,"Error", " Error: " & @error&@CRLF&".\Cello\fCello.txt")
Exit
EndIf
;==================Index der einzelnen .txt Dateien auslesen==================================
For $x = 1 to $fCello[0]
ConsoleWrite($fCello[$x]&@Crlf)
Next
For $iViolin = 0 To UBound($fViolin) -1
ConsoleWrite($iViolin&@Crlf)
Next
For $iklBratsche = 0 To UBound($fklBratsche) -1
ConsoleWrite($iklBratsche&@Crlf)
Next
For $igrBratsche = 0 To UBound($fgrBratsche) -1
ConsoleWrite($igrBratsche&@Crlf)
Next
For $iCello = 0 To UBound($fCello) -1
ConsoleWrite($iCello&@Crlf)
Next
;========================In ein zweidimensionales Array eintragen============================
Global $afViolin [$iViolin][2]
$afViolin[$iViolin][1] = $fViolin
$afViolin[$iViolin][2] = $aViolin
Global $afklBratsche [$iklBratsche][2]
$afklBratsche[$iklBratsche][1] = $fklBratsche
$afklBratsche[$iklBratsche][2] = $aklBratsche
Global $afgrBratsche [$igrBratsche][2]
$afgrBratsche[$igrBratsche][1] = $fgrBratsche
$afgrBratsche[$igrBratsche][2] = $agrBratsche
Global $afCello [$iCello][2]
$afCello[$iCello][1] = $fCello
$afCello[$iCello][2] = $aCello
Was macht das Skript:
Es liest die Daten aus den .txt-Dateien aus und schreibt diese in ein eindimensionales Array. Jeweils eines für Antworten und Fragen.
Im nächsten Schritt werden die Beiden Arrays (a und f) in einem Array zusammengeführt. Dabei sollten die Fragen in Spalte 1 und die Antworten in Spalte 2 eingeordnet werden.
Genau hier liegt der Haken...
Mit freundlichen Grüße
Stoani