• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Problem bei "freier" Eingabe

Nathus

Geonewbie
Bei meinem Wherigo habe ich eine Stelle, wo der Spieler einen Namen eingeben muss, den er in der (realen) Umgebung findet. Z.B. Paul II.
Bei Fehleingabe kann der Spieler so oft probieren wie er will, bis er die richtige Eingabe tätigt.
Nun taucht das Problem auf, dass manche Spieler hier trotzdem scheitern. Und zwar nicht, weil sie den richtigen Namen in der Umgebung nicht finden, sondern weil Telefon/Software/Cartridge, was auch immer, ihnen einen Strich durch die Rechnung macht.
Neulich hatte ich ein Spieler, der mit Samsung Galaxy S2 unterwegs war, und letztlich den Namen so eingeben musste: PAUL II.
Nur so kam er weiter.

Woran liegt das?
Kann man Abhilfe schaffen? Wenn ja, wie? :hilfe:

Programmiert habe ich mir Urwigo (ursprünglich gestartet mit G$-Prog :kopfwand: ).

Danke. VG, Nathus
 

Charlenni

Geomaster
Das kann natürlich an vielen Dingen liegen.

Ich würde auf alle Fälle alle Eingaben in Großbuchstaben umwandeln (es gehen natürlich auch Kleinbuchstaben). Anschließend alle Leerzeichen entfernen (auch führende oder folgende). Hat man die Zeichenkette so vorbereitet, dann kann man sich ähnliche Ergebnisse ausdenken. In diesem Beispiel könnte man etwa sagen, dass die folgenden Ergebnisse alle richtig sind:

PAUL, PAULI, PAULII, PAUL2, BAULII

Damit sollte dann doch ein korrektes Ergebnis drin sein.

Oder man macht anschließend eine Ähnlichkeitsanalyse, um zu überprüfen, wieviele Zeichen an der richtigen Stelle sind oder wenigstens vorhanden sind. Dann kann man sagen, dass, wenn die Übereinstimmung z.B. 80% beträgt, dass dann das Ergebnis korrekt ist.
 

hihatzz

Geomaster
Gebe dem String in dem du die Antwort speicherst einen Identifier, hier wie der Name des Strings "myString":
string identifier.jpg

Bevor du die Antwort auf Richtigkeit überprüfst wandelst du alle Buchstaben des Antwortstrings in Kleinbuchstaben und entfernst alle Whitespaces mit der Lua User Expression (den Identifier "myString" entsprechend anpassen mit dem den du verwendest):
lua user expression.jpg

Natürlich dafst du nicht vergessen die Lösung in deinem Vergleichsstring klein zu schreiben und die Spaces zu entfernen.
 
OP
N

Nathus

Geonewbie
Vielen Dank für die schnellen Antworten!
Ich bin gerade dabei es umzusetzen. Sieht ganz gut aus. Noch ein paar Fragen:

hihatzz schrieb:
Gebe dem String in dem du die Antwort speicherst einen Identifier, hier wie der Name des Strings "myString":
Anhang anzeigen 1
Muss bei "Text" eigentlich unbedingt was rein? Das hatte ich bisher leer gelassen.

hihatzz schrieb:
Bevor du die Antwort auf Richtigkeit überprüfst wandelst du alle Buchstaben des Antwortstrings in Kleinbuchstaben und entfernst alle Whitespaces mit der Lua User Expression (den Identifier "myString" entsprechend anpassen mit dem den du verwendest):
Was bedeuten die "kryptischen" Zeichen hinter dem String "string.gsub". Ich habe sie 1zu1 abgetippt, verstehe sie aber nicht. :irre:

Kann man den "." von Paul II. auch automatisch entfernen lassen? Dann würde ich beim Vergleichsstring paulII schreiben und fertig.

hihatzz schrieb:
Natürlich dafst du nicht vergessen die Lösung in deinem Vergleichsstring klein zu schreiben und die Spaces zu entfernen.
Erledigt.
 

Charlenni

Geomaster
Bei Text muss nichts rein. Das wird ja sowieso später überschrieben.

Für die genauen Angaben bezüglich des Patterns kannst Du eine englische Übersicht unter http://www.lua.org/manual/5.2/manual.html#6.4.1 finden. Dort kannst Du auch lesen, dass "%s" für alle möglichen Leerzeichen steht (also auch Zeilenumbrüche und so) und das "+" für eines oder mehrere dieser Art. Es wird also nicht nur " " ersetzt, sondern auch " ".

Wenn Du nun auch noch alle anderen Zeichen außer den reinen Buchstaben brauchst, dann kannst Du das Gleiche mit "[^%l]" (kleines L) machen. Dadurch werden alle Zeichen, die keine Kleinbuchstaben sind, rausgeworfen. Also gesamt "myString = string.gsub(myString,"[^%l]","")". Am Ende bleibt vom Beispiel "PaUl II." nur noch "paulii" übrig.
 

jonny65

Geomaster
Mooooment, hast du beim Compare Befehl die Checkbox "ignore case" aktiviert oder deaktiviert ? Defaultmäßig ist die Checkbox nämlich an und nimmt daher alle Antworten, pAuL iI., PaUL ii. usw. Intern wandelt vermutlich der Wherigo.NoCaseEquals sowohl die Eingabe, als auch die Vorgabe in Großbuchstaben um und vergleicht sie dann miteinander. Bestimmte ASCII Bereiche bleiben dabei natürlich ausgeschlossen, einen großen Punkt gibts ja nicht. :D

Interessant ist jetzt aber, ob das ganze nachzuvollziehen ist und auch ob es nur auf einem speziellen Player zu dieser Erscheinung kommt. Wenn dem so ist, wäre es wohl buggy und man müsste mit o.g Workarounds arbeiten.
 
Oben