Taannoin tuli eteen ongelma, miten saada oheisesta rimssusta haettua nuo lukemat erilleen eri muuttujiin. Kiire kun oli, niin tein homman valmiiksi wanhalla kunnon Instr ja/tai IndexOf systeemillä, mutta tulihan siitä hieman sekavan näköinen...
Mutta mitäpä arvon raati suosittaa paremmaksi ja selkeämmäksi menetelmäksi?
Ja tässä esimerkki lukemista. Lukujen numeroiden määrä vaihtelee, ja ne voivat olla myös negatiivisia.
nro=1 ce=(62.764086, 31.03189) ne=(62.768033, 31.041140) sw=(62.759971, 31.018867) zoom=16
Tutkailin Split-funktiota, ja rivimäärä väheni huomattavasti.
Formille yksi button, ja sille koodi:
. Dim litania As String = "nro=1 ce=(62.764086, 31.03189) ne=(62.768033, 31.041140) sw=(62.759971, 31.018867) zoom=16" Dim erottimet() As Char = {" "c, ","c, "="c, "("c, ")"c} Dim temp() As String Dim numero, zoom As Integer ' Näissä lopuksi lukemat Dim celat, celon, nelat, nelon, swlat, swlon As Single ' Näissä lopuksi lukemat Dim i As Integer temp = litania.Split(erottimet, StringSplitOptions.RemoveEmptyEntries) For i = 0 To temp.GetUpperBound(0) If temp(i) = "nro" Then numero = Val(temp(i + 1)) End If If temp(i) = "zoom" Then zoom = Val(temp(i + 1)) End If If temp(i) = "ce" Then celat = Val(temp(i + 1)) celon = Val(temp(i + 2)) End If If temp(i) = "ne" Then nelat = Val(temp(i + 1)) nelon = Val(temp(i + 2)) End If If temp(i) = "sw" Then swlat = Val(temp(i + 1)) swlon = Val(temp(i + 2)) End If Next '... ohjelma jatkuu ...
Esimerkiksi säännöllisillä lausekkeilla onnistuu. Jos juuri tämä ei toimi, voit itse korjailla virheet Googlen avulla, hakusana "regex" tai "regular expressions" ja tietenkin "VB.Net".
Imports System.Text.RegularExpressions ' ... Dim MatchObj As Match = Regex.Match(teksti, _ "nro=([0-9]+) " & _ "ce=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _ "ne=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _ "sw=[(]([0-9]*[.]?[0-9]+), ([0-9]*[.]?[0-9]+)[)] " & _ "zoom=([0-9]+)" _ ) numero = Val(MatchObj.Groups(1)) celat = Val(MatchObj.Groups(2)) celon = Val(MatchObj.Groups(3)) ' ...
Aihe on jo aika vanha, joten et voi enää vastata siihen.