Ich möchte Grad.Angaben, also so: N 49° 43’ 56" E 07° 17’ 19"
in Dezimalgrad umrechnen, die Umrechnung ist kein Problem, aber das saubere Parsen dieses Eingabestrings.
Man findet davon 2 verschiedene Varianten, wie kann sicher und sauber die Zahlenwerte aus diesen Strings herausfischen?
Kannst du davon ausgehen, dass die Trennungen immer identisch sind also N oder E immer mit Space abgetrennt sind?
Dann wäre es m.E.nur nötig, einen Split(" ") vorzunehmen und jeweils 4 Array-Elemente anzuschauen: Entweder das erste oder letzte davon muss die Himmelsrichtung sein, die Koordinaten selbst folgen dann ja in einer Art, dass man sie via Integer.Parse einlesen kann.
Gehe in einer Schleife über jedes Zeichen einzeln. Erkenne alle Ziffern. Solange eine Ziffer auf eine weitere folgt, sammle die zu einer Zahl zusammen. Alles übrige ignoriere, und füge die zuvor gesammelte Zahl zu einem Array hinzu. Schon hast du eine Sammlung von Zahlen. Wenn die Anzahl der Zahlen am Ende 6 ist, dann hast du vermutlich eine Grad-Angabe korrekt gescannt.
Code ginge etwa so (jetzt aus dem Kopf):
dim zahlen() as integer
dim aktZahl as string
dim input as string = "N 49° 43' 56"" E 07° 17' 19"""
for i as integer = 1 to input.len
dim ch as string = input.mid(i, 1)
if ch.asc >= 48 and ch.asc <= 57 then
// eine ziffer
aktZahl = aktZahl + ch
continue
end
if ch.trim = "" then
// space
elseif ch = "°" then
if (zahlen.Ubound mod 3) <> 0 then exit
elseif ch = "'" then
if (zahlen.Ubound mod 3) <> 1 then exit
elseif ch = """" then
if (zahlen.Ubound mod 3) <> 2 then exit
elseif ch = "N" then
if zahlen.Ubound > 2 then exit
elseif ch = "E" then
if zahlen.Ubound < 2 then exit
else
exit ' invalid char
end
if aktZahl <> "" then
// wir hatten zuvor eine zahl gesammelt - die nun speichern
zahlen.append aktZahl.val
aktZahl = ""
end
next
if zahlen.ubound = 5 then
// zahlen() enthält das Resultat
end