Postleitzahl eintippen, Name der Stadt in Fragen anzeigen

Mehr
1 Monat 1 Woche her #194582 von fraluhil
Hallo zusammen,
ich möchte einen Fragebogen erstellen, bei dem an verschiedenen Stellen der Wohnort der Befragten im Fragentext eingeblendet werden soll.

Der Teilnehmende soll seine Postleitzahl in ein kurzes Textfeld (das habe ich schon von Joffm gelernt) eintippen.
Mit diesem Eintrag soll dann in einer Postleitzahlentabelle (liegt mir vor mit rund 13.000 Einträgen für ganz Deutschland) in der ersten Spalte "PLZ" gesucht und der Name der Stadt aus Spalte 2 später weiterverwendet werden.

Gibt es hierzu Erfahrungen und kann mir jemand weiterhelfen?


Besten Dank und schöne Grüße

Frank



Version 3.22.7

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

LimeSurvey Partners
Mehr
1 Monat 1 Woche her #194587 von Joffm
Hallo,
da gibt es natürlich vieles.
Aber da ich mich nicht besonders mit javascript auskenne, hier
a. eine Lösung, die mit eingebauten Funktionen funktioniert.
1. Zunächst nimm eine Frage vom Typ ausführlicher Text (Q0) und kopiere Deine Liste als Vorgabeantwort dort hinein.

Wie Du siehst, endet jeder Ortsname mit einer Raute "#".
2. Dann kommt Deine Frage nach der Postleitzahl (Q1).
3. Mit einer Frage vom Typ Gleichung bestimmst Du nun den Ortsnamen. (eqOrt)
{substr(substr(Q0, strpos(Q0,Q1) ,strpos(Q0,'#', strpos(Q0,Q1) +1)- strpos(Q0,Q1) ) ,5)}
Das sind ganz schön viele Funktionen ineinandergeschachtelt, aber im Grunde machen sie Folgendes:
- aufgrund der PLZ wird die Stelle gesucht, die übereinstimmt.
- dann wird bis zum nächsten "#" geguckt
- zuletzt wird von der Stelle 6 (die ersten 5 sind ja die PLZ) bis zum Ende herauskopiert.

Das ist alles.

b. Etwas mehr sophisticated.
Nach der Frage nach der PLZ mache einen ajax call.
In einem von Dir erstellten php-script durchsuchst Du deine Liste (diese kann als array, als csv-file, oder in einer Datenbank vorliegen) nach dem Ort und gibst diesen zurück.

Joffm




Dateianhang:

Dateiname: limesurvey...1211.lss
Dateigröße:54 KB


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her - 1 Monat 1 Woche her #194591 von Joffm
Und noch eine dritte Lösung, sie im Anspruch zwischen diesen beiden liegt.

Plugin "autocomplete"
https://gitlab.com/SondagesPro/QuestionSettingsType

Dann genügt eine csv-Datei, z.B.
10001 Stadt 10001
10002 Stadt 10002
10003 Stadt 10003
10004 Stadt 10004
10005 Stadt 10005

Frage "short text" nach PLZ mit autocomplete.
Nach Eingabe von 5 Zeichen werden die Zeilen angezeigt, die damit beginnen (bei uns ist es ja immer nur eine Zeile)


Und mit einer kleinen Gleichung nehmen wir davon dann den letzten Teil, den Ortsnamen.
{trim(substr(Q2,6))}
Die ersten 5 Zeichen sind ja die PLZ und dann noch das Leerzeichen.

Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:
Letzte Änderung: 1 Monat 1 Woche her von Joffm.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her #194613 von fraluhil
Hallo Joffm,
besten Dank für die Tipps. Leider bekomme ich es nicht hin.

Zuerst habe ich Variante a probiert. Grundsätzlich habe ich die auch hinbekommen. Das Problem ist aber scheinbar, dass die Anzahl der Postleitzahlen mit den Ortsnahmen einfach zu groß ist. Ich bekomme alle Einträge in das Vorgabenfeld importiert, nach dem Abspeichern der Frage wird aber ein beträchtlicher Teil der Einträge "abgeschnitten". Es sind scheinbar zu viele.

Dann habe ich die zuletzt genannte Variante probiert, das Plugin installiert, aktiviert und die csv hochgeladen. Das funktioniert bei mir aber nicht. Die entsprechende Umfragedatei habe ich angehängt. Kannst Du mir hier weiterhelfen?

Besten Dank und schöne Grüße
Frank

Dateianhang:

Dateiname: limesurvey..._ort.lss
Dateigröße:14 KB

Dateianhang:

Dateiname: limesurvey..._ort.lss
Dateigröße:14 KB
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her - 1 Monat 1 Woche her #194614 von Joffm
Dann häng die csv-Datei auch an.
Du solltest sie allerdings zippen.


Gut, die erste Lösung geht nicht. Ein Textfeld - auch bei ausführlichem Text - ist nämlich 65000 Zeichen groß.
Und die Daten von 13000 Orten benötigen über 300000 Zeichen.

Aber die "autocomplete"-Lösung geht.

Ich habe jetzt eine Datei mit 13000 Orten angelegt.
Allerdings dauert es etwas länger, bis der Name erscheint. Das steht aber auch in der Doku.



Joffm

Hier ist übrigens ein workaround mit javascript und csv bzw. MySQL
https://manual.limesurvey.org/Workarounds:_Manipulating_a_survey_at_runtime_using_Javascript#Use_jQuery_Autocomplete_plugin_to_suggest_answers_for_text_inputs
Herunterscrollen bis Update for LimeSurvey 2.05+


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:
Letzte Änderung: 1 Monat 1 Woche her von Joffm.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her #194622 von fraluhil
Hier die Postleitzahlen-Datei.
Ich habe sie mit Notepad++ im utf-8-Format als csv abgespeichert und hoffe, dass es geklappt hat.
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her #194654 von Joffm
Hallo,
ist mir gerade eingefallen:
Gut, die Gesamtdatei ist zu groß.
Na, dann splitten wir sie eben auf in mehrere, für jede Anfangsziffer eine, z,B, Q0a, Q0b, Q0c,...
Und die Gleichung bekommt dann noch eine IF-Struktur übergestülpt, ganz unrein:

{if(substr(Q1,0,1=="1",
substr(substr(Q0a, strpos(Q0a,Q1) ,strpos(Q0a,'#', strpos(Q0a,Q1) +1)- strpos(Q0a,Q1) ) ,5),
if(substr(Q1,0,1=="2",
substr(substr(Q0b, strpos(Q0b,Q1) ,strpos(Q0b,'#', strpos(Q0b,Q1) +1)- strpos(Q0b,Q1) ) ,5),
if(substr(Q1,0,1=="3",
substr(substr(Q0c, strpos(Q0c,Q1) ,strpos(Q0c,'#', strpos(Q0c,Q1) +1)- strpos(Q0c,Q1) ) ,5),
...

Also je nach Anfangsziffer greift man auf einen anderen Pool zu.

Schaue ich mir dann noch genauer an.

Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her - 1 Monat 1 Woche her #194660 von Joffm
Okay,
also es läuft sehr gut, wenn Du Deine PLZ-Datei in 10 einzelne splittest.
Q00: alle die mit "0" beginnen,
Q01: alle, die mit "1" beginnen,
usw.

Ich habe dann eine Gleichung vorgezogen, um die erste Ziffer zu bestimmen; sie heißt dann auch "EZ" mit einfach {substr(Q1,0,1)}

Dann sieht die Hauptgleichung "Ort" so aus:
{if(EZ=="0",substr(substr(Q00, strpos(Q00,Q1) ,strpos(Q00,'#', strpos(Q00,Q1) +1)- strpos(Q00,Q1) ) ,5), if(EZ=="1",substr(substr(Q01, strpos(Q01,Q1) ,strpos(Q01,'#', strpos(Q01,Q1) +1)- strpos(Q01,Q1) ) ,5), if(EZ=="2",substr(substr(Q02, strpos(Q02,Q1) ,strpos(Q02,'#', strpos(Q02,Q1) +1)- strpos(Q02,Q1) ) ,5), if(EZ=="3",substr(substr(Q03, strpos(Q03,Q1) ,strpos(Q03,'#', strpos(Q03,Q1) +1)- strpos(Q03,Q1) ) ,5), if(EZ=="4",substr(substr(Q04, strpos(Q04,Q1) ,strpos(Q04,'#', strpos(Q04,Q1) +1)- strpos(Q04,Q1) ) ,5), if(EZ=="5",substr(substr(Q05, strpos(Q05,Q1) ,strpos(Q05,'#', strpos(Q05,Q1) +1)- strpos(Q05,Q1) ) ,5), if(EZ=="6",substr(substr(Q06, strpos(Q06,Q1) ,strpos(Q06,'#', strpos(Q06,Q1) +1)- strpos(Q06,Q1) ) ,5), if(EZ=="7",substr(substr(Q07, strpos(Q07,Q1) ,strpos(Q07,'#', strpos(Q07,Q1) +1)- strpos(Q07,Q1) ) ,5), if(EZ=="8",substr(substr(Q08, strpos(Q08,Q1) ,strpos(Q08,'#', strpos(Q08,Q1) +1)- strpos(Q08,Q1) ) ,5), if(EZ=="9",substr(substr(Q09, strpos(Q09,Q1) ,strpos(Q09,'#', strpos(Q09,Q1) +1)- strpos(Q09,Q1) ) ,5), ""))))))))))}


Also eine zwar lange, aber einfache, verschachtelte IF-Struktur.

Und jetzt kommt das Problem, welches bei der "autocomplete"-Lösung keines ist:


Mehrere Orte zu einer PLZ.
Hier findet die erste Lösung immer nur den ersten Ort.

Ich habe einmal gestoppt.
"autocomplete" benötigt um die 12 Sekunden, um den Ort / die Orte zu finden. Und es hängt nicht von der Position der PLZ ab.

Ich habe übrigens die Struktur der PLZ-Datei angepasst.
Für den ersten Fall:
01067Dresden#
01069Dresden#
01097Dresden#
01099Dresden#
01108Dresden#

also ohne Abstand und mit letztem "#" Zeichen.

Für autocomplete:
01067 Dresden
01069 Dresden
01097 Dresden
01099 Dresden

also ohne Komma, aber Leerstelle.

So, jetzt kommt die Frage:
Hast Du LS auf einem eigenen, also wohl gemieteten Server wie 1&1, Strato, usw. installiert?
Hast Du ein bisschen Ahnung von MySQL und php?

Dann können wir es weiter treiben.

Auf der anderen Seite kannst Du natürlich die Anzeige des Ortes einfach weglassen, oder Du lässt den Respondenten seinen Ort einfach selbst eintippen; dann kannst Du ihn während der Studie anzeigen, aber ernstlich brauchst Du ihn nicht (falls sich da Tippfehler einschleichen, da Du ja die PLZ hast.

Überlege es Dir.

Morgen kommt dann auch ein Beispiel, falls Du es überhaupt benötigst.
Im Grunde habe ich alles bereits beschrieben.

Joffm

Aber da ich sie schon hier habe,

Dateianhang:

Dateiname: limesurvey...2-27.lss
Dateigröße:256 KB

Die csv-Datei für autocomplete habe ich ja beschrieben.
Da musst Du nur das Komma in eine Leerstelle umwandeln.


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:
Letzte Änderung: 1 Monat 1 Woche her von Joffm.
Folgende Benutzer bedankten sich: fraluhil

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Woche her #194665 von fraluhil
Hallo Joffm,
ich bin sprachlos vor Ehrfurcht!
Ich hätte nicht gedacht, dass sich das Ganze so aufwändig gestaltet. Umso größer mein Dank, dass Du dich der Sache so intensiv angenommen hast.
Vielleicht probiere ich tatsächlich die zuletzt von Dir angesprochene Variante und lasse die PLZ und die Stadt händisch eingeben.

Ich habe Limesurvey auf meinem Webspace bei strato installiert und nur wenig Ahnung von MySQL und php. Da werde ich ohne tiefe Einarbeitung kaum die autocomplete-Variante hinbekommen und v.a. später bei weiteren Befragungen replizieren können. Mach Dir also nicht noch mehr Arbeit damit.

Besten Dank und schöne Grüße

Frank

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 6 Tage her - 1 Monat 6 Tage her #194696 von Joffm
Hallo,
es hat mir natürllich keine Ruhe gelassen, und habe in den Tiefen meiner Studien noch dieses Script gefunden:
<script type="text/javascript" src="/survey/upload/surveys/831211/files/jquery.csv.js">
 
</script><script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:complete',function() {
		var url = "/survey/upload/surveys/831211/files/plzort.csv";
 
		var Names = new Array();
 
		$.get(url,function(data){
			fullArray = $.csv.toArrays(data);
			$(fullArray).each(function(i, item){
				Names.push(item[0]);
			});
			$("#question{QID} input[type=text]").autocomplete({
                minLength: 5,
				source: Names
			});
		});
 
	});
 
</script>

Wie Du siehst, wird hier noch die javascript-Datei "jquery.csv.js" benötigt.





Läuft superschnell, aber irgendwie bei mir nur in einem erweiterten "fruity" theme (und in einem erweiterten "bootswatch").
Ich habe noch nicht gefunden, was da anders ist.

Nur so nebenbei.
Wenn dies überall liefe, wäre das eine wirklich tolle Lösung.


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:
Letzte Änderung: 1 Monat 6 Tage her von Joffm.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 6 Tage her #194699 von Joffm
Jetzt weiß ich woran es liegt.

In diesen erweiterten Themes ist im Folder "scripts" noch die "jquery-ui.min.js" enthalten.
Daran hatte ich doch (Alzheimer-geschädigt) überhaupt nicht mehr gedacht.

Wenn man dort auch die "jquery.csv.js" hinkopiert, muss sie nicht im script selbst sein.

Wenn Du also noch Interesse daran hast, schicke ich Dir den ganzen Kram zu.

Bis dann
Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Folgende Benutzer bedankten sich: fraluhil

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 6 Tage her #194710 von fraluhil
... das wäre wunderbar!
Besten Dank und schöne Grüße

Frank

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 2 Tage her #194744 von Joffm
So, jetzt kommt das ganze Material und eine kleines Beispiel.
In dieser zip-Datei befinden sich
  • die plzort.csv (Format "12345 Ortsname")
  • die jquery-ui.min.js
  • die jquery-ui.min.css
  • die jquery-csv.min.js

Dateianhang:

Dateiname: resources-...1211.zip
Dateigröße:157 KB


Ich habe alle 4 Dateien in das files-Verzeichnis der Studie hochgeladen.


Aus Gründen der Einfachheit werden sie nun alle ins Script übernommen.
<link href="/survey/upload/surveys/831211/files/jquery-ui.min.css" rel="stylesheet" type="text/css" /> 
<script src="/survey/upload/surveys/831211/files/jquery-ui.min.js"></script> 
<script src="/survey/upload/surveys/831211/files/jquery.csv.min.js"></script> 
<script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:complete',function() {
		var url = "/survey/upload/surveys/831211/files/plzort.csv";
 
		var Names = new Array();
 
		$.get(url,function(data){
			fullArray = $.csv.toArrays(data);
			$(fullArray).each(function(i, item){
				Names.push(item[0]);
			});
			$("#question{QID} input[type=text]").autocomplete({
                minLength: 5,
				source: Names
			});
		});
 
	});
 
</script>

Man kann diese jquery-Dateien auch ins Template einbinden, dann müssten die js-Datein ins js-Verzeichnis des Templates, die css-Datei ins css-Verzeichnis hochgeladen werden, und dann die config.xml des Templates angepasst werden.
Das erscheint mir für diese Fragestellung nicht notwendig.

Dann haben wir Folgendes:


und


Nun wird ja der "Langname" gespeichert; daher folgen zwei Gleichungen, um sowohl die PLZ und dann den Ortsnamen zu separieren.

Dateianhang:

Dateiname: limesurvey...3-01.lss
Dateigröße:39 KB

Bei Fragen, einfach melden.
Hilchenbach ist zwar etwas weit weg von mir; aber es ginge auch per Telefon.

Bis dann
Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:
Folgende Benutzer bedankten sich: fraluhil

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 1 Tag her #194825 von fraluhil
Was soll ich noch sagen?

Das Script läuft perfekt!

Ich habe gemäß der Anleitung von Joffm alle 4 Dateien in das files-Verzeichnis der Studie hochgeladen und dann mit der beigefügten Probe-Umfrage ausprobiert. Ging direkt!

Im nächsten Schritt habe ich die 4 Dateien und die Fragen aus Joffms Probe-Umfrage in eine Umfrage von mir importiert. Hat auch problemlos funktioniert. Ich musste noch nicht mal die Zeilen aus dem Script (<script src="/survey/upload/surveys/831211/files/jquery.csv.min.js"></script> ) anpassen, weil meine Umfragen-ID ja eine andere ist als im Script. Das passt sich offensichtlich selbst an.

Als weiteres Schmankerl habe ich in die csv-Datei noch eine Postleitzahl 00000 für die Personen eingefügt, die ihren Wohnort keinesfalls angeben wollen, als Ort erscheint dann "Ihre(r) Stadt/Gemeinde", was ich dann auch erläutere.

Aktuell optimiere ich meine Umfrage noch, wenn sie fertig ist, stelle ich sie mal online.

Besten Dank und schöne Grüße

Frank

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Monat 13 Stunden her #194862 von Joffm
Jetzt kommt noch ein Schmankerl von mir.

Mit dem plugin "checkBoxFor Text"
https://gitlab.com/SondagesPro/QuestionSettingsType





Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Jetzt loslegen!

Melden Sie sich jetzt an, und erstellen Sie in wenigen Minuten Ihre erste Umfrage.

Account einrichten

Abonnieren Sie unseren Newsletter

Abonnieren Sie unseren Newsletter für alle Neuigkeiten rund um LimeSurvey
captcha