0

Zufallsgenerator für Textbausteine

Liebe Community, 

ich spiele gerade ein wenig mit random() herum, für mich ist dieser Bereich komplett neu, mein Code könnte demnach auch fehlerhaft sein, ich würde mich nicht zu sehr darauf versteifen, ggf. ist ein komplett neuer Ansatz passender. Ich schildere kurz das Szenario, ich freue mich auf Eure Ideen, mein Code vorab:
(Ganz wichtig, die Fragen sind etwas eigen formuliert z.B. "Sind Sie eher offen, gesellig oder zurückhaltend, ruhig?" A wäre dann immer das zuerst genannte und B das Zweite) 

let befragungen := (select Befragung where 'Betreuungskräfte' = this);
let Anzeige := "";
for befragung in befragungen do
    let frage := befragung.Fragen;
    let antwortTyp := befragung.Auswahl;
    let options := (select Antwortoptionen where Fragen = frage and Auswahl = antwortTyp);
    if count(options) > 0 then
        let index := floor(random() * count(options)) + 1;
        let randomOption := item(options, index).Antwort;
        Anzeige := Anzeige + randomOption + " "
    end
end;
Anzeige

Der Code zeigt keinen Fehler an, gibt aber auch kein Ergebnis aus. 

In der Tabelle "Betreuungskräfte" habe ich eine Untertabelle namens "Befragung" erstellt. In der Tabelle "Befragung" gibt es eine direkte Verknüpfung zu der Haupttabelle "Fragen". Hier verlinkt man dann einfach die entsprechende Frage z.B. Frage 1. Zudem gibt es ein Auswahlfeld "Auswahl" 1 = A und 2 = B. Die Tabelle "Fragen" besteht aus einem Textfeld, namens "Frage", wo die Frage formuliert wird, einem Auswahlfeld namens "Kategorie" (vorerst unwichtig) und einer Untertabelle namens "Antwortoptionen". In der Untertabelle "Antwortoptionen" finden sich theoretisch viele Datensätze mit verschiedenen Antworten, welches durch das Auswahlfeld namens "Auswahl" zugeordnet werden sollen, die Optionen sind hier auch wieder A = 1 und B = 2. Das zweite Feld in der Untertabelle lautet "Antwort", ein Textfeld mit entsprechender Antwortformulierung. Kurz der Hintergrund von Antwortoptionen: Nehmen wir an, ich hätte mich oben für A entschieden, dann soll die automatisch generierte Antwort nicht immer gleich lauten "Die Person ist eher offen, gesellig." Es gibt viele Datensätze, welche alles unterschiedlich formuliert sind, hier soll dann der Zufall entscheiden. Am Ende sieht dann jede Personenbeschreibung anders aus, obwohl die Antworten ursprünglich gleich waren.

6 Antworten

null
    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Hi Felix. Stell mal den Code am Anfang noch etwas um. Mirko

    let me := this;
    let befragungen := (select Befragung where 'Betreuungskräfte' = me);
    ...
    
      • Felix.5
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Guten Morgen  , vielen Dank für den Hinweis, ich habe es mittlerweile anders gelöst, auch wenn es jetzt von der Struktur nicht mehr ganz so schön ist. Eine Sache ist jedoch sehr seltsam: 
      Ich habe pro Frage ein Auswahlfeld mit 1 = A und 2 = B erstellt, der Trigger nach Änderung füllt dann wiederum das Textfeld mit dem "generierten" Text. Es sind insgesamt 7 Fragen, bei ca. jedem zweiten auslösen hakt die Funktion und es wird kein Text übertragen, woran kann sowas liegen? 

      Es scheint mir eher ein globales Problem zu sein, weil der Code oft genug zuverlässig funktioniert.

      Es folgt mein neuer Code: 

      F6 = Auswahlfeld (A,B)

      "ID" in Optionen = Zahlenfeld (Zuordnung zur entsprechenden Frage)

          do as server
              let myID := this;
              let myChoice := number(myID.F6);
              let options := (select Optionen where ID = 6 and Auswahl = myChoice);
              if count(options) > 0 then
                  let index := floor(random() * count(options)) + 1;
                  let randomOption := item(options, index).Text;
                  'Persönlichkeitsbeschreibung' := 'Persönlichkeitsbeschreibung' + randomOption + " "
              else
                  if count(options) = 0 then
                      alert("Keine Optionen gefunden für ID = " + myID + " und Auswahl = " + myChoice)
                  else
                      alert("Unbekannter Fehler bei der Verarbeitung der Optionen.")
                  end
              end
          end

      Das Problem im Detail: Der Trigger fügt keinen Text ein, obwohl der Code von F1 bis F7 identisch ist. Die Auswahl friert sozusagen ein, nachdem ich z.B. B angeklickt habe, lässt sich "B" mit einem erneuten Klick auf "B" nicht mehr auf neutral stellen. Habe so etwas vorher noch nie gesehen. 

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Tja, ein bug ist manchmal eine Konstellation mit falschem Ergebnis, die nur unter bestimmten Bedingungen auftritt. Wenn Du noch Hilfe möchtest, dann müßtest Du eine Dummy-DB mit ein paar Datensätzen einstellen. Die würde ich mir dann ansehen. Gruß Mirko

      • Felix.5
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Hallo  , vielen lieben Dank, ich habe eine Musterdatenbank erstellt. Wenn man schnell zwischen A und B wechselt ist der Fehler besonders gut zu erkennen, vielleicht hilft ja sogar eine Verzögerung. Bin sehr gespannt auf Dein Urteil.

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Hi Felix. Anbei die DB. Es sind drei neue Textfelder, die jeweils die Ergebnisse der Auswahlfelder entgegennehmen. Der Sinn erschließt sich, wenn Du eine Auswahl änderst, oder entfernst. Unten ist das Feld "Persönlichkeitsbeschreibung" nun ein f(x) Feld und gibt jeweils das Gesamtergebnis wieder. Im Wesentlichen war es nur die Zeile 6 in Deinem Code. Das Ergebnis soll ja als Index in Zeile 7 benutzt werden und sollte also mit 0 beginnen. Mit Deiner Version ist ein Index möglich, der höher liegt als der größtmögliche und führt evtl. zum Einfrieren wenn er dran ist. Mirko

    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Im Script in F3 muß Zeile 16 geändert werden. 

    value3 := null
    

Content aside

  • vor 2 MonatenZuletzt aktiv
  • 6Antworten
  • 60Ansichten
  • 2 Folge bereits