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

[Wunsch][Solver] Erweitung des Befehls: format

t31

Geowizard
Ich fände eine Erweiterung des format-Befehls sinnvoll um x/y-Werte speziell bei utm und de.gk für weitere Berechnungen abgreifen zu können.
Bisher sieht der Befehl so aus: format(coordinate,fmt) mit fmt für das Ausgabeformat.
Nun könnte man diesen Befehl erweitern zu: format(coordinate,fmt,var) mit var für den gewünschten Parameter
Code:
S="N 50° 30.500 E 010° 30.500"

format(s,"utm","x") -> 606951
format(s,"utm","y") -> 5596239
format(s,"utm","zone") -> 32U

format(s,"de.gk ","x") -> 4394293
format(s,"de.gk","y") -> 5598012

Ziel wäre es, künftig folgende Stringoperationen zu vermeiden. Statt x/y könnte auch r/h verwendet werden, falls sich jemand an der Notation stört.
Code:
a=form(s,"de.gk")
p=instr(a," ")+1
q=instr(p,a," ")
x=mid(a,p,q-p)
y=mid(a,q+1,len(a)-q)
Ist jetzt nicht der Wahnsinn, macht aber doch den Programmcode unübersichtlich, besonders wenn mehrere Koordinaten in x/y-Werte aufgesplitet werden sollen.

Die Rückumwandlung ist bereits jetzt schon möglich:
Code:
format("de.gk "x" "y,"dmm")

bzw.

format("utm "zone" "x" "y,"dmm")
Bei utm muß man freilich bei der zone aufpassen.
 

arbor95

Geoguru
introducing a third parameter for the format - command:
getting the Nth part of the result of the same command without the third parameter.
Separator for the parts is Blank.

Beispiel:
S="N 50° 30.500 E 010° 30.500"
format(s,"de.gk") liefert de.gk 4394294 5598012

format(s,"de.gk","1") liefert de.gk
format(s,"de.gk","2") liefert 4394294
format(s,"de.gk","3") liefert 5598012
 

klausundelke

Geowizard
Ich hätte da ein Anliegen, welches auch hier reinpasst:

Ich hatte jetzt schon öfter das Problem, daß die Nachkommastellen der Koordinaten falsch interpretiert wurden.

A = 85
wird durch
"N 50 43."A
zu 850 statt zu 085

Klar kann man das bei jeder Koordinate eigens hinbringen, eleganter wäre aber,
wenn man das mit einer Art globalen Format-Befehl für die gesamte Sitzung festlegen könnte.
In der Art
FORMAT (00 00.000)
bedeutet:
Die Zahlen werden von hinten her aufgefüllt, haben also führende 0'en.
oder
FORMAT (## ##.###)
bedeutet:
Zahlen werden von vorne her aufgefüllt, Verhalten wie bisher...
 
OP
t31

t31

Geowizard
araber95 schrieb:
introducing a third parameter for the format - command:
getting the Nth part of the result of the same command without the third parameter.
Separator for the parts is Blank.

Beispiel:
S="N 50° 30.500 E 010° 30.500"
format(s,"de.gk") liefert de.gk 4394294 5598012

format(s,"de.gk","1") liefert de.gk
format(s,"de.gk","2") liefert 4394294
format(s,"de.gk","3") liefert 5598012
@araber95,

das sieht richtig gut aus, perfekt - vielen Dank.

t31
 

Robin888

Geomaster
klausundelke schrieb:
Ich hatte jetzt schon öfter das Problem, daß die Nachkommastellen der Koordinaten falsch interpretiert wurden.

A = 85
wird durch
"N 50 43."A
zu 850 statt zu 085
Ich habe mir angewöhnt in solchen Fällen pauschal

"N 50 43."A:000:

zu schreiben. Es sei denn ich sehe an der Formel, daß es dreistellig sein muss. Dann lasse ich es schonmal weg.
klausundelke schrieb:
Klar kann man das bei jeder Koordinate eigens hinbringen, eleganter wäre aber, wenn man das mit einer Art globalen Format-Befehl für die gesamte Sitzung festlegen könnte.
In der Art
FORMAT (00 00.000)
bedeutet:
Die Zahlen werden von hinten her aufgefüllt, haben also führende 0'en.
oder
FORMAT (## ##.###)
bedeutet:
Zahlen werden von vorne her aufgefüllt, Verhalten wie bisher...
Das halte ich für schwierig, oder?
Woran soll erkannt werden, wo so ein Ausdruck in der Bedeutung auftaucht?

Jeder Zahl so darzustellen ist natürlich sinnlos.
Nur Zahlen mit einem Dezimaltrenner ist auch unpraktisch.
Nur "Zahlen" mit einem Leerzeichen und einem Dezimaltrenner?
Das ergibt sicher auch jede Menge ungewollter Effekte.

Auf das A im obigen Beispiel dürfte diese globale Eigenschaft z.B. noch nicht angewendet werden, sondern erst auf den kompletten String "N 50 43."A
Wenn der String aber schon zusammengesetzt ist, dann kann der Parser doch auch nicht mehr unterscheiden, ob das A gleich 85 oder 850 war.

Ich würde weiterhin das bisherige Verhalten bevorzugen. Da hat man wenigstens ein gewisses Maß an Kontrolle und weiß, was passiert.

P.S.: Wenn sowas umgesetzt wird, dann würde ich vorschlagen sich auch mal Gedanken um fünf- oder siebenstellige Zahlen zu machen:
Es gibt immer wieder Aufgaben bei der man als "Koordinaten" z.B. die Zahl 43085 herausbekommt oder 5043085. Ist im ersten Fall noch eine Division durch 1000 ausreichend (A=43085; "N 50 "A/1000:00.000:) muss man im zweiten Fall schon etwas basteln um an den Zahlen Koordinaten zu machen (A=5043085; "N "mid(A, 1, 2)" "mid(A, 3, len(A-2))/1000:00.000:).

Robin
 
Oben