[Talk-de] Mapping Workflow mit Garmins nüvi550

Wolfgang osm at kahl-hinsch.de
Fr Jul 10 19:28:19 UTC 2009


Am Donnerstag, 9. Juli 2009 21:35:54 schrieb Tobias Hägele:
> Hallo,
>
> erstmal vielen Dank für deine Mühe.
>
> Leider funktioniert deine Anleitung bei mir nicht.
>
> Wolfgang schrieb:
> > Am Freitag, 26. Juni 2009 12:22:28 schrieb Ingo Lantschner:
> >> c. Gibt es schon ein Tool für den Export wie oben beschrieben?
> >
> > c) kurz gebastelt:
> >
> > sed \

Aufruf von sed (siehe man sed), der Backslash muss letztes Zeichen vor dem 
Zeilenwechsel sein (der dadurch nicht beachtet wird)

> > -e 's/<trk>/\n<trk>/g' \

Füge vor jedem <trk> (Trackbeginn-Zeichen) einen Zeilenwechsel ein

> > -e 's/<\/trk></<\/trk>\n</g' \

Füge hinter jedem </trk> (Trackende), auf das ein < folgt, einen Zeilenwechsel 
ein. Das erfolgt nur nach dem letzten Track, da die anderen Tracks ja bereits 
abgetrennt sind. Bei mir stehen in der Current.gpx hinter dem letzten Track  
noch einige Daten zu Wegepunkten etc.

> > $1 | \

gibt den Filenamen an, von dem sed lesen soll, und schreibt das Ergebnis in 
die Leseschlange des nächsten Befehls

> > sed \

wiederum ein sed

> > -e '1d' \
> > -e '$d' \

der die erste und letze Zeile  löscht (Zeilen ohne Track)

> >
> >> temp.gpx

geht bestimmt eleganter, aber das Zwischenergebnis ist die temp.gpx, in der 
bereits jeder Track in einer eigenen Zeile steht 

> >
> > nn=`cat temp.gpx|wc -l`

nn = Anzahl der Zeilen (=tracks) der temp.gpx (Hochkomma ist rückwärts!)
Zur Fehlersuche : "echo $nn" einfügen. Ist nn 0 oder nicht gesetzt, stimmt 
hier etwas nicht (Hochkomma rückwärts z.B.)

> > nx=1
> > while [ "$nx" -le "$nn" ]
> > do
> >         sed -n -e "$nx wtrack$nx.gpx" temp.gpx

sed schreibt nichts in die Standardausgabe, schreibt zeile nx (mit nx=1, 
nx=2 ...) in eine eigene Datei mit namen track1.gpx, track2.gpx ...

> >         (( nx++ ))

Zählt Variable nx hoch

> > done
>
> Ich hab das mal so, mit einem  #!/bin/bash davor, in eine Datei kopiert,

Steht die Zeile mit der bash wirklich in der allerersten Zeile?

> diese dann als test.sh gespeichert und mit chmod +x ausführbar gemacht.
>
> aufrufen tu ich das ganze dann mit #sh test.sh Current.gpx
>
> Als Ergebnis erhalte ich dann die besagte temp.gpx, in ihr ist alles ab
> der zweiten Zeile der Original gpx enthalten. Auch Zeilen in denen kein
> trk enthalten ist.

Möglicherweise ist deine current.gpx anders aufgebaut, so dass zwischen den 
Tracks noch weitere Daten stehen? Was gibt "wc -l temp.gpx" ?

> Dann entsteht noch die Datei track1.gpx, in der der Inhalt der ersten
> Zeile der temp.gpx enthalten ist.
> Und von da an spuckt mir das terminal in endloschschleife folgendes
> entgegen:
> test.sh: 17 nx++: not found

deutet darauf hin, dass nicht bash benutzt wird. Innerhalb der doppelten 
runden Klammern funktioniert eine ganze Reihe von C-Rechenoperationen, aber 
nur in bash, nicht in der c-/korn-/k&r-...-shell.

>
> Ich bin ratlos

Starte mal eine interaktive bash. Teste folgende Befehle direkt auf der 
Kommandoebene, das Bild muss danach so aussehen:
$ nx=1
$ (( nx++ ))
$ echo $nx
2
$

Wenn du nicht die 2 erhälst, musst du an der Stelle weitersuchen. Achte genau 
auf alle Blanks. nx=1 ohne Blank, ((_nx++_)) mit 2 Blanks.
Klappt das, führe das script direkt in der bash aus.

>
> > Alternative für Geübte in vi/gvim, wobei [[strg]] die strg-Taste meint:
> > :s/<trk>/[[strg]]vm<trk>/g

Doppelpunkt, Cursor springt in die unterste Zeile, dann Klartext s/<trk>/, 
dann strg-Taste drücken und festhalten, vm, strg-Taste loslassen, Klartext 
<trk>/g
Bedeutet: Tausche <trk> gegen Zeilenwechsel<trk> aus
Mit der Kombination strg-v weiß vim, dass jetzt ein Kontrollzeichen kommt. Die 
Anzeige wechselt auf ^, mit dem m auf ^M, das ist der Zeilenwechsel.
Das abschließende /g führt den Befehl für jedes Vorkommende <trk> aus.

> > :1,$ s/<\/trk></<\/trk>[[strg]]vm<

Fügt nach dem letzten Track einen Zeilenwechsel ein.

> > :1 w track1
> > :2 w track2

schreibt Zeile 1 in Datei track1 ...
Alternative: springe direkt auf die Track-Zeile und :w track1 für den ersten 
etc...

> >
> > ...
>
> Nunja, geübt bin ich nicht wirklich... Was genau soll ich mit der
> Strg-Taste machen? einmal drücken? gedrückt halten? Egal was, bei mir
> tut sich nichts, mit glück bekomme ich ein "Ausdruck nicht gefunden"
> aber das wars.
>
Achte darauf, dass im 2. Austauschbefehl im </trk> der Slash durch einen 
Backslash maskiert werden muss, damit er nicht zum Trennzeichen des 
Austauschbefehls wird.  \/

Versuch das erst mal mit einem kleinen Probesatz.

Viel Glück,

Wolfgang






Mehr Informationen über die Mailingliste Talk-de