Koordinaten umrechnen. TextFile

Hallo,
Ich lese eine TextDatei Teilenweise aus.
Der Inhalt der Zeilen sieht wie folgt aus:

52° 21’ 38,14604’’ 9° 45’ 24,08945’’ 1043xxxx05C/104ccc38M
53° 3’ 9,52203’’ 7° 19’ 45,60115’’ 10430xxxx6B/114310xx06A
53° 29’ 3,34421’’ 9° 8’ 18,88235’’ 114xxxx132A

Nun würde ich gern die WGS84 Werte ins Dezimal format umwandel,

Wie folgt
aus 52° wird 52
aus 21’ wird 21 / 60
aus 38,14604’’ wird 38,14604 / 360

und das mit beiden angaben pro zeile. und die beschriftung am ende sollte so übernommen werden.
Also sollte das Format am ende so aussehen:
6.95015, 50.93649, „1212321323“

kann mir da jemadn helfen ?

mfg jonny

Hi jonny,

Ich lese eine TextDatei Teilenweise aus.
Der Inhalt der Zeilen sieht wie folgt aus:

52° 21’ 38,14604’’ 9° 45’ 24,08945’’

Bis hier her sehe ich das Problem nicht.

1043xxxx05C/104ccc38M

Was damit werden soll, habe ich nicht verstanden. :smile:

Also zurück zu Teil 1

Du kennst Replace, damit entfernst Du erst mal alle überflüssigen Leerzeichen.

Dann ein Split und Du hast sechs einzelne Strings.

Entweder erstezt Du die Grad, Minuten Sekunden jetzt durch Leerzeichen und rechnest, oder Du ersetzt die Minunten durch ‚/ 60‘ und die Sekunden durch ‚/ 360‘ und lässt die Werte mit Eval berechnen, das ist aber vermutlich langsam. Mit Instr() kannst Du ja prüfen, ob da wirklich Minuten/ Sekunden angegeben sind, bevor Du rechnest …

Also außer Replace, Split, eventuel noch Instr fallen mir nur die Grundrechenarten ein, mehr wird nicht benötigt.

Wo ist das Problem?

Gruß Rainer

Hi Jonny,

kann mir da jemadn helfen ?

gerne, wenn du mir verrätst wie du von

52° 21’ 38,14604’’ 9° 45’ 24,08945’'1043xxxx05C/104ccc38M

mit deinen Rechenregeln auf

6.95015, 50.93649, „1212321323“

kommst !?

Wie Rainer schon sagte ist es keinerlei Problem, sofern er immer gleich aufgebaut ist, deinen Ausgangsstring auszuschlachten und die Werte für Grad, Hochkomma, Doppelhochkomma rauszuholen und umzurechnen.

Kannst du mal ein besseres Beispiel bringen wo ich eher sehe was du möchtest.

Gruß
Reinhard

Hi Jonny,

kann mir da jemadn helfen ?

gerne, wenn du mir verrätst wie du von

52° 21’ 38,14604’’ 9° 45’ 24,08945’'1043xxxx05C/104ccc38M

mit deinen Rechenregeln auf

6.95015, 50.93649, „1212321323“

Sorry habe das Falsche ergebniss gepostet.

kommst !?

Wie Rainer schon sagte ist es keinerlei Problem, sofern er
immer gleich aufgebaut ist, deinen Ausgangsstring
auszuschlachten und die Werte für Grad, Hochkomma,
Doppelhochkomma rauszuholen und umzurechnen.

Kannst du mal ein besseres Beispiel bringen wo ich eher sehe
was du möchtest.

kommt sofort, kurz die frau rausschmeissen :stuck_out_tongue:
mfg joe

Gruß
Reinhard

Also, so sollte es passen
52° 21’ 38,14604’’
52 21 38,14604
21/60 38,14604/360
52 0,35 0,105961222

52+ 0,35+ 0,105961222

52,45596122
Mein Problem im moment ist das ich nach dem Replace und dem Splitt nicht mit dem String Rechnen kann.

mfg jonny

Mein problem ist die addition am ende … die ist irgendwie Falsch ?
mfg jonny

Dim nextstep As String
Dim Newkords As String


Private Sub Form\_Load()
 Dim ff As Integer
 Dim Txt As String
 Dim l As Long
 Dim na As String
 Dim Teil() As String
 Dim i As Long

 ff = FreeFile
 na = App.Path & "\input.csv"

 Open na For Input As #1
 Do While Not EOF(1)
 Line Input #1, s
 Teil = Split(s, ";")

 For i = LBound(Teil) To UBound(Teil)
 Teil(i) = Replace(Teil(i), " ", "")
 Teil(i) = Replace(Teil(i), " ", "")
 Teil(i) = Replace(Teil(i), Chr(9), "")
 nextstep = Teil(i)

 If InStr(nextstep, "°") Then
 nextmoep
 End If

 Next

 Loop
 Close #1
End Sub

Private Sub nextmoep()
 Dim Teil() As String
 Dim i As Long
 Dim erg1 As String
 Dim erg2 As String
 Dim erg3 As String

 i = 0

 erg1 = 0
 erg2 = 0
 erg3 = 0

 nextstep = Replace(nextstep, "°", "!")
 nextstep = Replace(nextstep, "''", "!")
 nextstep = Replace(nextstep, "'", "!")
 Teil = Split(nextstep, "!")
 For i = LBound(Teil) To UBound(Teil)
 If i = 0 Then
 erg1 = Teil(i)
 End If
 If i = 1 Then
 erg2 = Teil(i) / 60
 End If
 If i = 2 Then
 erg3 = Teil(i) / 360
 End If
 Next

Newkords = erg1 + erg2 + erg3
List1.AddItem erg1 & "--" & erg2 & "--" & erg3
List1.AddItem Newkords
End Sub

Ji Jonny,

> Dim nextstep As String  
> Dim Newkords As String  
>   
>   
> Private Sub Form\_Load()  
> Dim ff As Integer  
> Dim Txt As String  
> Dim l As Long  
> Dim na As String  
> Dim Teil() As String  
> Dim i As Long  
>   
> ff = FreeFile  
> na = App.Path & "\input.csv"  
>   
> Open na For Input As #1  
> Do While Not EOF(1)  
> Line Input #1, s

Splitten am Semikolon? Da ist doch gar keins.

> Teil = Split(s, ";")  
>   
> For i = LBound(Teil) To UBound(Teil)  
> Teil(i) = Replace(Teil(i), " ", "")  
> Teil(i) = Replace(Teil(i), " ", "")  
> Teil(i) = Replace(Teil(i), Chr(9), "")

Das bau ich mal um.

 While Instr(s," ")
 s = Replace(s," "," " 
 Wend
 S = Replace(s, Chr(9), "")
 s = Replace(s, "°","")
 While Instr(s,"'")
 s = Replace(s,"'","" 
 Wend


    
    Mit der While-Schleife ist es egal, wie vile Leerzeichen da sind, es bleibt genau eins übrig. Die Einheiten sind auch weg.
    
    nun Split, aber richtig.
    
    
        
         Teil = Split(s, " ")
    
    
    
    Das Leerzeichen ist das Trennzeichen.
    
    
        
        
        
        > nextstep = Teil(i)  
        >   
        > If InStr(nextstep, "°") Then  
        > nextmoep  
        > End If  
        >   
        > Next  
        >   
        > Loop  
        > Close #1  
        > End Sub  
        >   
        > Private Sub nextmoep()  
        > Dim Teil() As String  
        > Dim i As Long  
        > Dim erg1 As String  
        > Dim erg2 As String  
        > Dim erg3 As String  
        >   
        > i = 0  
        >   
        > erg1 = 0  
        > erg2 = 0  
        > erg3 = 0  
        >   
        > nextstep = Replace(nextstep, "°", "!")  
        > nextstep = Replace(nextstep, "''", "!")  
        > nextstep = Replace(nextstep, "'", "!")  
        > Teil = Split(nextstep, "!")
        
    
    
    
    Noch mal Split? Der string ist doch schon zerlegt.
    Ich habe das Entfernen von ° und ' gleich oben mit erledigt.
    
    
        
        
        
        > For i = LBound(Teil) To UBound(Teil)  
        > If i = 0 Then  
        > erg1 = Teil(i)  
        > End If  
        > If i = 1 Then  
        > erg2 = Teil(i) / 60  
        > End If  
        > If i = 2 Then  
        > erg3 = Teil(i) / 360  
        > End If  
        > Next
        
    
    
    
    Dann ist eine Schleife eher wenig Sinnvoll, da kannst Du auch gleich schreiben...
    
    
        
         Newkords = Teil(0) + Teil(1) / 60 + Teil(2) / 360
    
    
    
    ... das macht das Selbe. :smile:
    
    
        
        
        
        > List1.AddItem erg1 & "--" & erg2 & "--" & erg3  
        > List1.AddItem Newkords  
        > End Sub
        
    
    
    
    
    Also noch mal zusammengefasst:
    
    
    
        
        Private Sub Form\_Load()
         Dim ff As Integer
         Dim s As String
         Dim na As String
         Dim Teil() As String
         Dim Newcoord1 As String
         Dim Newcoord2 As String
        
         ff = FreeFile
         na = App.Path & "\input.csv"
        
         Open na For Input As #1
         Do While Not EOF(1)
         Line Input #1, s
         s = Replace(s, "°", "")
         s = Replace(s, ",", ".")
         s = Replace(s, Chr(9), "")
         While InStr(s, " ")
         s = Replace(s, " ", " ")
         Wend
         While InStr(s, "'")
         s = Replace(s, "'", "")
         Wend
         Teil = Split(s, " ")
         Newcoord1 = CStr(CDbl(Teil(0)) + CDbl(Teil(1)) / 60 + CDbl(Teil(2)) / 360)
         Newcoord2 = CStr(CDbl(Teil(3)) + CDbl(Teil(4)) / 60 + CDbl(Teil(5)) / 360)
         List1.AddItem Newcoord1 + " " + Newcoord2 + " " + Teil(6)
         Loop
         Close #1
        End Sub
    
    
    
    
    Funktioniert das besser? Ungetestet, ich habe ja keine Daten.
    
    Gruß Rainer

Ja, Moin
Da hast du meine 100 Zeilen code ja mal fix wieder um 1/10 komprimiert…

hier gibt es noch ein Type mismatch:
Newcoord1 = CStr(CDbl(Teil(0)) + CDbl(Teil(1)) / 60 + CDbl(Teil(2)) / 360)
newcoord1 und Teil() sind string … hmmm

achso: http://www.ichbinderfelix.de/input.csv

ich probiere weiter

Hi Jonny,

Da hast du meine 100 Zeilen code ja mal fix wieder um 1/10
komprimiert…

*gg* das ist meine Spezialität. :smile:

hier gibt es noch ein Type mismatch:
Newcoord1 = CStr(CDbl(Teil(0)) + CDbl(Teil(1)) / 60 +
CDbl(Teil(2)) / 360)
newcoord1 und Teil() sind string … hmmm

hmmmm, setzte doch mal einen Stoppunkt und sieh’s Dir im Debugger an. Wenn die Strings ‚Teil()‘ in Ordnung sind, sollte das funktionieren.

Gruß Rainer

hier gibt es noch ein Type mismatch:
Newcoord1 = CStr(CDbl(Teil(0)) + CDbl(Teil(1)) / 60 +
CDbl(Teil(2)) / 360)
newcoord1 und Teil() sind string … hmmm

achso: http://www.ichbinderfelix.de/input.csv

Hi Joe,

leider kennt mein VB5.0 keinen Replace-Befehl, Code ist also nicht VB-getestet:

Option Explicit
'
Private Sub Form\_Load()
Dim ff As Integer
Dim s As String
Dim na As String
Dim Teil() As String
Dim Newcoord1 As String
Dim Newcoord2 As String
ff = FreeFile
'na = App.Path & "\input.csv"
na = "H:\input.csv"
Open na For Input As #ff
Line Input #ff, s
Do While Not EOF(ff)
 Line Input #ff, s
 s = Replace(s, "°", " ")
 s = Replace(s, "'", " ")
 While InStr(s, " ")
 s = Replace(s, " ", " ")
 Wend
 Teil = Split(s, " ")
 If UBound(Teil) = 6 Then
 Newcoord1 = CStr(CDbl(Teil(0)) + CDbl(Teil(1)) / 60 + CDbl(Teil(2)) / 360)
 Newcoord2 = CStr(CDbl(Teil(3)) + CDbl(Teil(4)) / 60 + CDbl(Teil(5) / 360))
 ListBox1.AddItem Newcoord1 + " " + Newcoord2 + " " + Teil(6)
 Else
 ListBox1.AddItem Teil(0)
 End If
Loop
Close #ff
End Sub

Gruß
Reinhard

Nachtrag: Ersetze ListNox1 durch List1 o.w.T.

Besten Dank an ALLE !!!

Hat jemand ANNO (Alex) gesehen ?

mfg jonny

Hi Jonny,

Hat jemand ANNO (Alex) gesehen ?

in letzter Zeit nicht, aber Alex taucht immer auf, wenn Du nach ihm rufst. :smile:

Gruß Rainer

Hi Joe,

Besten Dank an ALLE !!!

soll das heißen mein Code läuft? Würd mich freuen.

Hat jemand ANNO (Alex) gesehen ?

Nö, vielleicht ist er verdunstet, verduftet, verliebt, verurlaubt, verhaftet, verschieden, verzogen, nicht mehr veronlined, verschnupft, wer weiß das schon.

Oder die Anwälte von Bill Gates haben das Subjekt aus dem Verkehr gezogen, gibt da Gerüchte *kicher*

Nö, ich weiß nicht wo Alex sich so rumtreibt.

Gruß
Reinhard

Grüezi Joe

achso: http://www.ichbinderfelix.de/input.csv

Der Link ist leider tot…

ich probiere weiter

…denn ich hätte gerne auch geholfen…

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Der Link ist leider tot…
…denn ich hätte gerne auch geholfen…

Grüezi Thomas,

ich denk du bist in Urlaub? Also ab auf den Balkon, Gipfel, Strand, Wald, was auch immer, Hauptsache der PC ist aus :smile:

Naja, wenn du es nicht lassen kannst, bitteschön (sind 3,3 MB, die ziehen sich wenn badango wie eben nur 41 kBit/s anbietet):

http://www.badongo.com/file/10388347

Rainer wußte ja nichts von der Überschriftszeile und daß einige wenige Zeilen das falsche Format haben,bzw. sie bestehen nur aus Chr(9) und einem Eintrag, also konnte Teil(6) usw. nicht funktionieren.

Gruß
Reinhard

Grüezi Reinhard

Der Link ist leider tot…
…denn ich hätte gerne auch geholfen…

ich denk du bist in Urlaub? Also ab auf den Balkon, Gipfel,
Strand, Wald, was auch immer, Hauptsache der PC ist aus :smile:

Nunjaaaaa, ich häng hier noch etwas ab bis ich dann am Donnerstag losdüse - im Übrigen ganz in der Nähe von FFM vorbei :smile:

Naja, wenn du es nicht lassen kannst, bitteschön (sind 3,3 MB,
die ziehen sich wenn badango wie eben nur 41 kBit/s anbietet):

http://www.badongo.com/file/10388347

…ich wollte ja eigentlich bloss ein paar Beispieldaten in einer .CSV -Datei haben - nicht unbedingt die ganze Lösung mit Errorhandling und zig Userforms (ohne das ich die Datei schon gesehen hätte :wink:)

Danke schon mal ich werd mal reinschauen

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

http://www.badongo.com/file/10388347

…ich wollte ja eigentlich bloss ein paar Beispieldaten in
einer .CSV -Datei haben - nicht unbedingt die ganze Lösung mit
Errorhandling und zig Userforms (ohne das ich die Datei schon
gesehen hätte :wink:)

nö, halb so wild, ist ja nur eine Userform mit einer Listbox, (Tipp, mach sie gleich sehr breit), im Code ist ja oben nur Formload in Userform1_Initialize und unten List1 in ListBox1 zu ändern.

Gruß
Reinhard