Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Fragestellung entsprechend vorheriger Mehrfachantwort anpassen

  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 6 months ago #206612 by Nessias
Hallo liebe Community,

mich beschäftigt folgendes Probelem:
Ich möchte gerne in einer Fragestellung das Antwortverhalten der vorherigen Frage (eine Mehrfachantwort) widerspiegeln.
Konkret heißt das: ich habe eine Frage F1 mit Mehrfachantwort, die z.B. nach Einkommenquellen fragt. Hier gibt es 4 Antwortmöglichkeiten.
Die Folgefrage F2 soll dann im Fragetext die Antworten auf die Frage F1 beinhalten (ähnlich wie bei einem F1.shown-Befehl.
Die Frage könnte also heißen: "Sie haben angegeben, dass sie Antwort_1 als Einkommensquelle haben." So weit so gut. Für den Fall, dass ein Teilnehmer nun bspw. Antwort_1, Antwort_3 und Antwort_4 ankreuzt, würde ja nun eine stumpfe Auflistung dieser Items folgen, ohne Komma oder das Bindewort "und". Die Fragestellung würde also lauten: "Sie haben angegeben, dass sie Antwort_1 Antwort_3 Antwort_4 als Einkommensquelle haben."

Mein Ziel ist es aber, das ganze etwas netter zu gestalten, so dass in diesem Fall die Fragestellung eben um ein Komme und ein "und" ergänzt wird: "Sie haben angegeben, dass sie Antwort_1, Antwort_3 und Antwort_4 als Einkommensquelle haben."

Die Schwierigkeit liegt ja nun aber darin, dass im Prinzip erst einmal gezählt werden müsste, wie viele Kreuze in Frage F1 gesetzt wurden und dann "entschieden" wird, ob ein "und" ausreicht (wenn genau 2 Antworten gewählt wurden) oder ob vorher noch ein Komma gebraucht wird, nämlich wenn 3 Antworten angekreuzt wurden (bzw. 2 KOmmas und ein "und" bei 4 Kreuzen).

Meine Lösung wäre jetzt, die Frage F2 in mehreren Versionen zu programmieren und entsprechend der Anzahl der Antworten aus Frage F1 die passende F2 anzuzeigen.

Aber gibt es dafür auch eine elegantere Lösung? Vielleicht mit verscheidenen Bedingungen?

Vorab schon einmal vielen Dank.

Beste Grüße
Nessias
The topic has been locked.
  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 6 months ago - 3 years 6 months ago #206659 by holch

Für den Fall, dass ein Teilnehmer nun bspw. Antwort_1, Antwort_3 und Antwort_4 ankreuzt, würde ja nun eine stumpfe Auflistung dieser Items folgen, ohne Komma oder das Bindewort "und".

Nein, würde es nicht. Schon mal ausprobiert? Wird nicht funktionieren. Du verwendest eine Mehrfachantwort. Dort ist jede Antwortoption eine "Unterfrage" (Subquestion). D.h. im Prinzip hast du 4 "Ja/Nein" fragen. Wenn jemand also eine Antwort ankreuzt, dann wird "Y" in der Datenbank hinterlegt, ansonsten ist es leer.

Auf die einzelnen Unterfragen kannst du so zugreifen:
Code:
{Questioncode_subquestioncode}

In deinem Fall müsstest du im Prinzip für jede Unterfrage abfragen, ob sie markiert wurde und dann entscheiden, was ausgegeben werden soll.

In etwa so:
Code:
{if(Q1_SQ1=="Y",Q1_SQ1.shown,"")}

Das sollte den Unterfragen-Text ausgeben, wenn die Unterfrage markiert wurde, als ein Y in der Datenbank steht, ansonsten gibt die Gleichen einfach nix aus.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

Last edit: 3 years 6 months ago by holch.
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 6 months ago #206768 by Joffm
Hallo,
nun ja, es gibt die Funktion "list". Mit dieser erhältst Du eine komma-separierte Liste.
Und mit den Suffix ".shown" erhältst Du nur die ausgewählten Antworten.
Insgesamt also {list(that.Q1.shown)}
Also zum Beispiel "Antwort 1, Antwort 2, Antwort 5"-
Alles zu finden im Handbuch.
Hier
manual.limesurvey.org/ExpressionScript_-...mplemented_functions
und hier
manual.limesurvey.org/ExpressionScript_-...#Access_to_variables

Jetzt möchtest Du das letzte Komma in ein "und" umwandeln.
Das ließe sich nun mit einigen Stringfunktionen hinbekommen, indem man (eine rohe Idee von mir) die Positionen der Kommata bestimmt mit "strpos", das Maximum bestimmt "max", und dann dieses Komma duch " und" ersetzt "str_replace".
Aber ob sich der Aufwand lohnt...

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 6 months ago #206834 by Nessias
Hallo Leute,

vielen Dank für die Antworten und Lösungsvorschläge.

Ich werde versuchen, es mal umzusetzen, auch wenn es sehr aufwändig klingt.
Falls ich an die "Projekt-Deadline" gerate, lasse ich mir was anderes einfallsen.
Vielleicht stelle ich die Fragen dann anders. Aber ich werde es auf jeden Fall erstmal versuchen.

Auf jeden Fall wieder einmal vielen Dank für eure Hilfe.

Beste Grüße
Nessias
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 6 months ago #206861 by Joffm
Naja, das Aufwendigste ist die Umwandlung eines einzelnen Kommas in "und".
Meiner Ansicht nach würde es völlig ausreichen, die Standard-Kommata zu belassen, also
Antwort 1, Antwort 2, Antwort 5
mittels {list(that.Q1.shown)}

oder ALLE Kommata in "und" unzuwandeln.

Dies geschieht übrigens mit der Funktion "str_replace".
Antwort 1 und Antwort 2 und Antwort 5
Dann würde die Funktion so aussehen:
{str_replace(", "," und ",list(that.Q1.shown))}

Und dann kannst Du ja noch "spielen" indem Du Hochkommata umd die Antworttexte setzt:
'Antwort 1' und 'Antwort 2' und 'Antwort 5'
{join("'",str_replace(", ","' und '",list(that.Q1.shown)),"'")}

Bis jetzt weißt auch nur Du, wieviele Antworten Du erwarten kannst.
Zum Beispiel könntest Du eine Fallunterscheidung machen; bei zwei Antworten wird das Komma durch "und" ersetzt, bei mehr Antworten belässt man das Komma.

Das ist alles relativ geradeaus.

Um nur das letzte Komma umzubauen, musst Du übrigens "substr" benutzen.
Ich hatte mich im vorigen post vertan.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Nessias
The topic has been locked.
Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose