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

Makroprog. Stringmanipulation

baby hübner

Geomaster
Folgendes Problem:
Ich möchte mit einem Makro Text (variabler Länge) innerhalb von mir selbst erstellten Anfangs- und Endtags ersetzen. Zum finden der Tagpositionen würde ich RegExPos benutzen. Aber mit welcher Funktion kann ich diese Werte benutzen um Text zu ersetzen oder von mir aus auch löschen und neu einfügen?

Gibt es evtl. einen eleganteren Weg ohne RegExPos?

Besten Dank
bh
 
OP
baby hübner

baby hübner

Geomaster
OK. Die Lösung lautet RegExReplace. Hatte in meinem alten GSAK schon damit rumgespielt. Bin aber an der regular Expression gescheitert. Clyde hat die Hilfe zu dieser Funktion allerdings inzwischen etwas ausführlicher gemacht, so dass ich genug klauen konnte.

Hier mein Testmakro:
Code:
$einsatz ="okidoki"
$test = "qwertz qwertz <<dies muss ersetzt werden>> qwertz"
$test = RegExReplace("<<.*>>",$test, "<<"+$einsatz+">>")
msgok msg=$test
In der Stringvariablen $test wird der von << und >> eingeschlossene Text durch $einsatz ersetzt und das Ergebnis angezeigt.
 
OP
baby hübner

baby hübner

Geomaster
Ich bastel gerade an einem Makro, das GCVote, FavPoints, LastFoundDate, PMO Status und eine kleine Log Summery in die Short Description einfügt. Ich weiß, ich weiß: So etwas ähnliches macht auch das GarminExport Makro. Letzteres schreibt die Infos allerdings als ersten Eintrag in die Logs.

Für mich ist das nicht ergonomisch genug. Wenn ich irgendwo spontan entscheiden möchte, in welcher Richtung ich den nächsten Cache angehe, will ich nicht (im schlimmsten Fall) durch 8000+ Zeichen Wikipedia durchscrollen müssen. Ich will durch Antippen des Caches auf der Karte, sämtliche (für mich) relevanten Infos so schnell es geht zu Gesicht bekommen.

Die Ersetzungsprozedur ist notwendig, um den Infoteil in der ShortDes zu finden und gezielt updaten zu können. Bei reinem Hinzufügen würde die ShortDes immer länger werden mit veralteten Daten.

Sollte es bereits ein Makro geben das dies so macht, bin ich über jeden Hinweis dankbar. Neu erfinden muss ich das Rad nicht! :D
 

Angrentil

Geomaster
Klingt spannend. ;)

baby hübner schrieb:
Die Ersetzungsprozedur ist notwendig, um den Infoteil in der ShortDes zu finden und gezielt updaten zu können. Bei reinem Hinzufügen würde die ShortDes immer länger werden mit veralteten Daten.

Aber könntest du auf den Ersetzungsteil nicht einfach umgehen, indem du bei jedem Update die bisherigen Infos komplett löschst und dann neu reinschreibst? Das müsste doch einfacher sein, oder? :???:
 
OP
baby hübner

baby hübner

Geomaster
Angrentil schrieb:
Aber könntest du auf den Ersetzungsteil nicht einfach umgehen, indem du bei jedem Update die bisherigen Infos komplett löschst und dann neu reinschreibst? Das müsste doch einfacher sein, oder? :???:

Das wäre die pragmatische Lösung.

Man muss sich dann aber absolut sicher sein, alles richtig gemacht zu haben bevor man das Makro über seine DB jagt.

Und Fehler machen kann man genug: Vergessen die FavPoints und den PMOStatus über die API oder die Votes über den Grabber zu holen? Dummerweise war noch ein Filter gesetzt? Gelöste Mystis noch nicht eingepflegt? ...Immer kann man vorne anfangen.

Darum möchte ich, dass das Makro die ShortDes updatet und nicht einfach nur ergänzt.

Im Prinzip funktioniert schon alles. GUI, Holen der Daten, Zusammenbasteln des Strings. Aber an zwei Problemen beiss ich mir noch die Zähne aus:
1. Zeilenumbrüche krieg ich nicht umgesetzt (in der ShortDes, intern gehts)
2. RegEx und RegExReplace treiben mich in den Wahnsinn. Solange ich innerhalb eines Makros damit arbeite ist alles in Ordnung. Aber wehe ich hole mir die Daten über $d_ShortDescription. Da wird nichts mehr gefunden oder ersetzt, selbst wenn ich es direkt reingeschrieben habe. :help:
 
Oben