04.07.2023, 20:06
(This post was last modified: 05.07.2023, 21:26 by wilfriedh.
Edit Reason: Verbesserung der Genauigkeit
)
Es geht noch einfacher und genauer, siehe Code unten.
Ach ja, den Code in eine Textdatei kopieren mit der Erweiterung .rex (z.B. konv.rex),
dann in der Eingabeaufforderung aufrufen mit "konv.rex Dateiname_aus_Stadtradeln.gpx korrigierte_Datei.gpx"
Voraussetzung: Installierter REXX Interpreter (z.B. Regina)
Ach ja, den Code in eine Textdatei kopieren mit der Erweiterung .rex (z.B. konv.rex),
dann in der Eingabeaufforderung aufrufen mit "konv.rex Dateiname_aus_Stadtradeln.gpx korrigierte_Datei.gpx"
Voraussetzung: Installierter REXX Interpreter (z.B. Regina)
Code:
/* Stadtradeln gpx file (Unix Zeitstempel) in Standard gpx konvertieren */
NUMERIC DIGITS 14 /* Erhöht den Genauigkeitsbereich von Integerzahlen von 9 auf 14 Stellen */
/* die eingelesenen Werte haben bereits 13 signifikante Stellen */
/* ohne diese Erhöhung der Genauigkeit werden die Sekunden-Werte auf 10-Sekunden-Schritte gerundet */
parse arg infile outfile
if outfile='' then do
say "Es muessen 2 Dateinamen angegeben werden"
exit 1
end
/* Kopfzeilen unveraendert ausgeben */
do i = 1 to 4
line = linein(infile)
lout = line
rc = lineout(outfile,lout)
end
/* Startdatum der unix Zeitrechnung in der REXX Zeitrechnung */
/* REXX Zeitrechnung beginnt am 01.01.0001 */
uxstart = DATE('B','1 Jan 1970','N')
/* Zeilenweise konvertieren */
do while lines(infile)>0
line = linein(infile)
if line = '</trkseg>' then leave
parse var line beginn "<time>" uxtime "</time>" schluss
uxdays = uxtime % 86400000 /* Integer Division */
rxdays = uxstart + uxdays
sec = TRUNC((uxtime / 1000) - (uxdays * 86400))
/* die Aneinander-Reihung von Variablen und Strings ohne trennende Leerzeichen erzeugt eine Verkettung ohne Leerzeichen: */
lout = beginn'<time>'DATE('I',rxdays,'B')'T'TIME('N',sec,'S')'Z</time>'schluss
rc = lineout(outfile,lout)
end
/* Schlusszeilen ausgeben */
lout = line
rc = lineout(outfile,lout)
do while lines(infile)>0
line = linein(infile)
lout = line
rc = lineout(outfile,lout)
end
