Zufälliges Auswählen einer Zeile aus einer txt

Startseite Foren Deutsches LiveCode-Forum Zufälliges Auswählen einer Zeile aus einer txt

Ansicht von 10 Antwort-Themen
  • Autor
    Beiträge
    • #973
      DanielStriffler
      Teilnehmer

      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 zeigefrage

      sWenn eine Antwort ausgewählt wird 1 zu fraegNr, dann kommt eben die nächste Zeile als Frage.

      Vielen lieben Danke für die Hilfe.

    • #975
      Klaus Major
      Verwalter

      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

    • #976
      DanielStriffler
      Teilnehmer

      Nochmals Danke für die Hilfe!
      Dein Bier geht am WE auf Reisen

    • #977
      hauke
      Verwalter

      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

    • #979
      Klaus Major
      Verwalter

      Mensch Hauke, das geht natürlich auch, ist aber viel zu einfach! 😀

    • #981
      DanielStriffler
      Teilnehmer

      🙂


      @Hauke
      : super funktioniert.

      @Klaus
      : Dein Bier bekommst du natürlich trotzdem

      Bei Hauke weiß ich ja nicht ob er überhaupt so ein gutes, dunkles, leckeres Bier aus Oberbayern mag

    • #983
      Klaus Major
      Verwalter

      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!

    • #990
      hauke
      Verwalter

      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?

      😉

    • #1019
      DanielStriffler
      Teilnehmer

      😉 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 haben

      Ich 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

    • #1021
      hauke
      Verwalter

      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

    • #1028
      Klaus Major
      Verwalter

      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

Ansicht von 10 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.