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
        Administrator

          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
            Administrator

              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
              Administrator

                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
                  Administrator

                    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
                    Administrator

                      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
                        Administrator

                          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
                          Administrator

                            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.