Startseite › Foren › Deutsches LiveCode-Forum › Zufälliges Auswählen einer Zeile aus einer txt
- Dieses Thema hat 10 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren, 9 Monaten von
Klaus Major.
-
AutorBeiträge
-
-
Mai 11, 2017 um 17:57 Uhr #973
Hallo zusammen,
ich baue ja eine QuizApp für meine Schüler. Jetzt habe ich einen Prüfungsmodus eingebaut, bei dem 30 Fragen aus 200 Fragen einer txt Datei zufällig ausgewählt werden sollen.
Ich habe mir hier Haukes QuizApp als Vorbild genommen.
Alles funktioniert 🙂Nur wie kann ich die Fragen zufällig „einlesen“.
So geht es bis jetzt schön der reihe nach:put line frageNr of LCtext into zeile
set itemDelimiter to „#“
put item 1 of zeile into frage
put item 2 of zeile into antwort1
put item 3 of zeile into antwort2
put item 4 of zeile into antwort3
put item 5 of zeile into antwort4
put frage into fld „frage“
put antwort1 into richtigeAntwort
put antwort1&trennen&antwort2&trennen&antwort3&trennen&antwort4 into antworten
set itemDelimiter to „trennen“
sort items of antworten by random(4)
repeat with z = 1 to 4
put item z of antworten into fld („antwort“&z)
end repeat
repeat with x = 1 to 4
set the disabled of fld („antwort“&x) to false
end repeat
put frageNr &“/ „&fragenAnzahl into fld „frageNr“
end zeigefragesWenn eine Antwort ausgewählt wird 1 zu fraegNr, dann kommt eben die nächste Zeile als Frage.
Vielen lieben Danke für die Hilfe.
-
Mai 11, 2017 um 18:07 Uhr #975
Hi Daniel,
ich würde eventuell Folgendes machen:
1. die TXT Datei komplett in eine Custom Property einlesen.
…
set the cAlleFragen of this stack to url(„file:pfad/zu/deiner datei.txt“)
…
2. Für jede Frage diese CP in eine Variable einlesen
3. Diese Variable zufällig sortieren
4. erste Zeile in die erste Frage packen
5. Erste Zeile der Variable löschen (Doubletten vermeiden!)
6. Variable wieder in CP packen
7. Für die nächste Frage wieder bei 2. anfangen
…
put the cAlleFragen of this stack into tAlleFragen
sort lines of tAlleFragen by random(10000)
put line 1 of tAlleFragen into tAktuelleFrage
delete line 1 of tAlleFragen
set the cAlleFragen of this stack to tAlleFragen
## Weitermachen wie oben mit tAktuelleFrage
…
Capisce? 🙂Gruß
Klaus
-
Mai 11, 2017 um 18:23 Uhr #976
Nochmals Danke für die Hilfe!
Dein Bier geht am WE auf Reisen -
Mai 11, 2017 um 20:58 Uhr #977
Hallo Daniel,
warum nicht einfach nur den einen Befehl
sort lines of LCText by random(1000)
direkt nach dem Einlesen der Fragenliste anwenden. Dann sind die Fragen gemischt und können danach schön nacheinander in ihrer zufälligen Reihenfolge abgearbeitet werden.
Oder verstehe ich Deine Frage falsch?
Grüße
Hauke
-
Mai 12, 2017 um 10:53 Uhr #979
Mensch Hauke, das geht natürlich auch, ist aber viel zu einfach! 😀
-
Mai 12, 2017 um 15:07 Uhr #981
-
Mai 12, 2017 um 15:30 Uhr #983
Danke, sieht so aus, als häte ich hier einen HAUCH zu kompliziert gedacht… 😀
Aber so musst Du wenigstens nicht „Buch führen“, welche Zeile zuletzt benutzt wurde! -
Mai 14, 2017 um 16:17 Uhr #990
Bei Hauke weiß ich ja nicht ob er überhaupt so ein gutes, dunkles, leckeres Bier aus Oberbayern mag…
Ohoho… Du traust mir zu, ein gutes, dunkles, leckeres Bier aus Oberbayern abzulehnen?
😉
-
Mai 17, 2017 um 22:15 Uhr #1019
😉 das würde glaube ich niemand verschmähen.
@Klaus: Leider hat der Getränkemarkt am WE das Bier nicht mehr gehabt. Die haben wohl Lieferschwierigkeiten. Ich versuche am kommenden WE nochmal mein Glück.Ich habe noch eine Frage zu meiner App. Jetzt habe ich festgestellt, dass die richtige Antworte, immer das Feld 1-4 durchläuft. Sprich :
Frage 1 ist Feld 1 richtig
bei 2 dann 2 und so weiter.Wenn alle 4 daran waren beginnt es von vorne.
Das möchte ich ja aber durcheinander habenIch habe es so versucht.
on zeigefrage
show group „quiz“
put line frageNr of LCtext into zeile
set itemDelimiter to „#“
put item 1 of zeile into frage
put item 2 of zeile into antwort1
put item 3 of zeile into antwort2
put item 4 of zeile into antwort3
put item 5 of zeile into antwort4
put frage into fld „frage“
put antwort1 into richtigeAntwort
put antwort1&trennen&antwort2&trennen&antwort3&trennen&antwort4 into antworten
set itemDelimiter to „trennen“
sort items of antworten by random(100)
repeat with z = 1 to 4
put item z of antworten into fld („antwort“&z)
end repeat
hide widget „richtig“
hide widget „falsch“
repeat with x = 1 to 4
set the disabled of fld („antwort“&x) to false
end repeat
put frageNr &“/ „&fragenAnzahl into fld „frageNr“
end zeigefrage -
Mai 18, 2017 um 05:40 Uhr #1021
Hallo Daniel,
der itemDelimiter ist immer ein char – das heißt, nur ein Zeichen. Zum Beispiel „#“ oder tab oder „*“ – das muss auch in Anführungszeichen stehen, wenn DU die Zeichen separierst und entsprechend wieder als itemDelimiter gesetzt werden.
Dann sollte es auch korrekt gemischt werden.
Grüße
Hauke
-
Mai 18, 2017 um 09:46 Uhr #1028
Hi Daniel und Hauke,
seit Version 7 kann der „itemdelimiter“ auch mehrere Zeichen lang sein!
Aber der muss natürlich in Anführungzeichen stehen.So sollte es klappen:
... put antwort1 & "trennen" & antwort2 & "trennen" & antwort3 & "trennen" & antwort4 into antworten set itemDelimiter to "trennen" sort items of antworten by random(100) ...
Mit einem nur ein Zeichen langen itemdel hättest Du aber entschieden weniger Tipperei. 😀
Gruß
Klaus
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.