1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. dafunkydroid, 15.05.2018 #1
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Hallo Tasker-Gemeinde!
    Ich habe mir da ein etwas komplexes Thema vorgenommen: Es gibt eine ziemlich gute Sprachlern-App (Ankidroid) auf SQL-Basis, die man selbst befüllen kann.

    Was mir aber sehr fehlt, ist eine intuitive Nachschlage-Option. Die möchte ich jetzt selbst basteln :-D
    Aus der DB wird die relevante Spalte ("Sprache1 - Sprache2") von Tasker ausgelesen.
    Jetzt geht es darum, eine Volltext-Suche zu machen, und alle Ergebnisse in einer Scene auszuspucken. Mit Hilfe eines Codeschnipsels habe ich das auch rudimentär hinbekommen, hänge aber an einigen Stellen... Wo sind die Tasker-Cracks? :)

    1) RegEx-Suchstring anpassen
    Die Suche ist derzeit eine RegEx-Suche (vermute ich, hab den Schnipsel geklaut aber nicht gecheckt :p). Wenn ich nach 'apple' suche, wird auch 'pineapple' ausgespuckt. Kann mir jemand helfen, den Syntax so zu ändern, dass 'pineapple' nicht mehr gefunden wird?
    Variable Set %index to %sql(#?*SUCHSTRING*)

    2) Suchergebnisse
    Das Ergebnis in %index sind übrigens die IDs der einzelnen Zeilen, als z.B. "2,3,6,11,25" Das wird dann mit "Split Variable" zerlegt. Die Suchergebnisse bekomme ich dann nacheinander mit
    %sql(%index1)
    %sql(%index2)
    %sql(%index3)
    usw. angezeigt.
    Zum einen bin ich aber recht sicher, dass ich die einzelnen Ergebnisse dann später nochmal separat splitten muss (siehe Frage 3 - Tabellarische Anzeige). Zum anderen habe ich das Problem, dass ich das grad noch hard gecoded habe. Entweder es gibt mehr Suchergebnisse als ich hinterlegt habe, oder es werden leere Variablen angezeigt.
    Wie kann ich das in den Griff kriegen?

    3) Suchergebnisse in Scene Tabellenformat anzeigen
    Im scrollbaren Text-Ergebnisfeld werden die Ergebnisse aktuell zentriert und Zeile für Zeile ausgegeben.
    Das ist sehr unübersichtlich, vor allem wenn die Zeilenbreite nicht reicht - was es bräuchte, wäre eine Art unsichtbare Tabelle, damit Sprache1 und Sprache2 gegenüberstehen, aber Sprache2 (in der zweiten Hälfte des Textfelds) bündig dargestellt werden. Könnt ihr mir nen Tipp geben, wie ich das erreichen könnte?
    Eine sehr basic HTML-Tabelle habe ich versucht, aber da wird wohl keine Formatierung übernommen, sondern nur der Inhalt.
    Zwei separate (scrollbare) Textfelder fällt aus, da ja die Zeilen (Sprache1/Sprache2) syncron bleiben müssen.


    Uff. Viele Fragen. Aber ich habe echt Spaß an dem Projekt, und würd mich echt freuen wenn das vorzeigbar würde. Dann würde ich das auch sehr gerne auf der Seite des Programm (Ankidroid, falls es jemanden interessiert) posten, und natürlich auch hier. Aktuell ists noch ne totale Baustelle ;-)

    Danke euch für jeden Input und Lösungen! :)
     
  2. Mathens, 15.05.2018 #2
    Mathens

    Mathens Fortgeschrittenes Mitglied

    Kannst du dein Projekt exportieren und mit der Datenbank als .zip hier hochladen, damit wir deine Baustelle genauer anschauen können.
     
    dafunkydroid bedankt sich.
  3. dafunkydroid, 15.05.2018 #3
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Ja sicher, sehr gerne!
    Ich dachte nur, es ist höflicher und besser wenn ich konkrete Fragen stelle, statt dass sich jemand durch Baustellen & Stümpercode gräbt ;-) Achja, da ja noch nicht mal der Unterbau steht, nicht vom grafisch aufhalten lassen bitte ;-)

    Im Anhang das Projekt. Kurze Erläuterungen:
    collection.anki2 ist die SQL-Datenbank der Ankidroid-App. Die relevante Spalte ist in der Tabelle 'notes', in der Spalte 'flds'

    Das Tasker-Projekt besteht derzeit aus 2 Tasks und einer Scene.
    Der Task "Run "AnkidroidHelper_Main" öffnet die entsprechende Scene. Hier wird nur der Suchbegriff eingegeben, und als %par1 an den Task "Run Search" weitergegeben. Das Suchergebnis wiederrum wird dann an die Scene weitergegeben.

    Danke für alle Tipps! Und mir hilft es schon sehr, wenn ihr mich bei den konkreten Fragen in die richtige Richtung schubsen könnt... Viele Grüße :)

    Edit: Ergänzung: Wer sich die SQL nicht anschauen möchte: Das Ergebnis der relevanten Spalte ist im Format "Sprache1[TAB]Sprache2"
     

    Anhänge:

    Mathens bedankt sich.
  4. Mathens, 16.05.2018 #4
    Mathens

    Mathens Fortgeschrittenes Mitglied

    1) Der RegEx-Suchstring den du brauchst ist (?i)\b%search\b . Wenn zwischen Gross- und Kleinschreibung auch unterschieden werden soll, muss das (?i) weggelassen werden.
    Jedoch lässt er sich so nicht verwenden wie bisher.
    Um ihn zu verwenden brauchst du eine FOR-Schleife und ein IF-Abfrage.
    Bei der IF-Abfrage musst du Matches Regex auswählen(~R).
    A1: For [ Variable:%index Items: 0:%anki(#) ]
    A2: If [ %anki(%index) ~R (?i)\b%search\b ]
    A3: Variable Set [ Name:%Ergebnisse To:%anki(%index)
    Recurse Variables:Off Do Maths:Off Append:On ]
    A4: End If
    A5: End For

    2) Das erreichst du, wenn du die Ergebnisse der For-Schleife in einer einzelnen Variable schreibst. Dazu musst du bei Variable Set den Haken bei Append setzen.

    3) Dazu habe ich dir leider noch keine Lösung
     
    Zuletzt bearbeitet: 16.05.2018
    dafunkydroid bedankt sich.
  5. dafunkydroid, 16.05.2018 #5
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Wow, Wahnsinn!!! Ich kann es heute nicht mehr checken, aber ich meld mich zurück sobald ichs angefasst habe! Liest sich aber sehr schlüssig (verdammt, ich muss mir wirklich mal For und RegEx anschauen bzw. draufschaffen).

    Das mit der formatierten Ausgabe... ich horch mich mal um. Was natürlich eine heidenarbeit ist, ist das zu Fuß zu machen - lauter einzelne Textfelder, und einer vorwärts/rückwärts Blätterfunktion und Array Rotate... Aber das möcht ich eigentlich um jeden Preis vermeiden, das gibt garantiert Spaghetti. Naja, ich schau mal. Und vielleicht gibts ja noch nen heißen Ansatz hier von anderen.

    Jedenfalls ganz großes Dankeschön dir!! Das ist großes Kino. Ich gebe bald Rückmeldung!

    Viele Grüße!
     
  6. Mathens, 16.05.2018 #6
    Mathens

    Mathens Fortgeschrittenes Mitglied

    Der Suchstring hatte noch einen Fehler.
    Der korrekte ist (?i)\b%search\b
     
    Zuletzt bearbeitet: 16.05.2018
    dafunkydroid bedankt sich.
  7. dafunkydroid, 17.05.2018 #7
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Echt Wahnsinn. Das funktioniert einwandfrei!! Vielen vielen Dank dir nochmal! :thumbsup:

    Für 3) habe ich übrigens auch einen recht vielversprechenden, oder zumindest zielführenden Ansatz gefunden: Das Suchergebnis kann mit Search/Replace zu einer HTML-Tabelle umgebastelt werden. Ich kann ein Element WebView erstellen, in diesem kann eine HTML-Datei angezeigt werden.
    Leider muss ich (aktuell) einen Umweg über eine Datei machen, lokale Variablen scheint Tasker als Quelle nicht verarbeiten zu können (wenngleich die Option angeboten wird). Aber da kann ich mich mal durchwurschteln, ggf. nachfragen wie ich das ohne Umweg über eine Temp-Datei hinbekomme...

    Kleiner Schritt für große Profis, großer Schritt für kleine Amateure :biggrin:
     
  8. Mathens, 17.05.2018 #8
    Mathens

    Mathens Fortgeschrittenes Mitglied

    Auf die Lösung mit einer HTML-Tabelle und einer zusätzlichen Datei bin ich auch gekommen.
    Habe es gerade noch mit einer Variable versucht und bei mir hats geklappt.
    Lade dir sobald ich mehr Zeit habe den Task hier hoch.

    Wie hast du es mit dem splitten der zwei Sprachen gelöst?
     
    dafunkydroid bedankt sich.
  9. dafunkydroid, 17.05.2018 #9
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Eigentlich ist es gar kein richtiges splitten und auch nicht sehr sauber :p
    Bei jedem Fund in der Schleife stelle ich <td> voran und Ende mit </td>
    Dann suche ich zum Schluss nach [TAB] und ersetze es durch
    HTML:
    </td>
    <td>
    Ohne den Umweg über eine Datei muss ich nochmal schauen - vielleicht liegt es daran dass es keine globale Variable war...
     
  10. Mathens, 17.05.2018 #10
    Mathens

    Mathens Fortgeschrittenes Mitglied

    Bei mir habe ich in den Variablen keinen [TAB].
    Sondern es sieht so aus
    Screenshot_20180517-165925-01.jpeg

    Mit einer globalen Variable ist es einfacher. Geht aber auch mit einer lokalen Variable wenn du am Ende von Task die Aktion "Return" einfügst und so die Variable an die Scene weitergibst.
    In der Scene musst du noch bei der Aktion "Perform Task" bei Punkt "Return Value Variable" die Variable angeben
     
  11. dafunkydroid, 17.05.2018 #11
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Mhmm, das ist seltsam. Bei mir wirds als Tab formatiert angezeigt und ausgegeben... Meine Systemsprache ist Englisch, vielleicht deswegen?
    Du könntest auch mal versuchen, das Zeichen einfach zu kopieren, und als Replace-Wert einzusetzen...?

    Das mit der Variable versuch ich dann gleich mal, Super! :)

    PS: Jetzt wo wir so nett am reden sind... :biggrin: Ich würde gerne überprüfen, ob das Suchfeld leer ist. Das Problem dabei: "If Variable Set" greift nicht, da %new_val nicht gelöscht wird, sondern nur eben leer ist... Wenn ich überprüfen wollte "If Variable matches", kann ich den Wert nicht leer lassen :confused2:
     
  12. Anturix, 17.05.2018 #12
    Anturix

    Anturix Android-Lexikon

    Moin
    Eine Variable kann nicht leer sein.
    Eine Variable ohne Inhalt ist per Definition "not set"
     
  13. dafunkydroid, 17.05.2018 #13
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Also, das ist reproduzierbar, auch in einer Neuen Szene:
    Text Input Feld und ein Button. Der Button ist so konfiguriert: Flash "HUHU" if %val_new !Set

    Wenn ich ein paar Buchstaben tippe, dann alles wieder weglösche, und den Button drücke, passiert - nix :tongue:
     
  14. Mathens, 17.05.2018 #14
    Mathens

    Mathens Fortgeschrittenes Mitglied

    Kann ich bestätigen.

    Wenn du %new_val vor der Abfrage in einer anderen Variable speicherst, kannst du mit dieser die Abfrage machen.
    Diese Variable hat den Wert "%new_val" wenn %new_val nicht gesetzt ist.
    Mit ~ \%new_val kannst du diese dann abfragen.
     
    dafunkydroid bedankt sich.
  15. Anturix, 18.05.2018 #15
    Anturix

    Anturix Android-Lexikon

    Moin
    Dein Button hat keinen Zugriff auf %val_new. Die Variable ist eine lokale Variable für dein Textfeld.
    Du musst in dem Fall, den von Mathens beschriebenen Weg gehen.
     
  16. dafunkydroid, 18.05.2018 #16
    dafunkydroid

    dafunkydroid Threadstarter Fortgeschrittenes Mitglied

    Da muss ich dir wieder widersprechen :biggrin:
    Wenn ich auf den Button Flash %new_val setze, passiert genau das ;-)

    Aber der Workaround von Mathens klappt, Merci!
    Es wird immer mehr :cool2:
     
Die Seite wird geladen...
Du betrachtest das Thema "RegEx, Arrays, formatierte Ausgabe - 3 verschiedene Fragen für mein neues Tasker-Projekt" im Forum "Tasker",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.