function GetPostalAddress(s)
dim a
a = split(s, ";")
GetPostalAddress = a(4)
end function
function GetPostalCodeAndCity(s)
dim a
a = split(s, " ")
GetPostalCodeAndCity = a(0) & """" & ";" & """" & a(1)
end function
Som skall dela upp en sammansatt postnummer/ort i en semikolonseparerad lista enligt:
Kör som du kör, split men populera en array med x poster, erstätt om det finns något i spliten: str(x) = splitStr(x)...
Provade en annan väg:
function GetPostalCodeAndCity(s)
dim a, b
a = split(s, ";")
if instr(a(4), " ") > 0 then
b = split(a(4), " ")
GetPostalCodeAndCity = ";" & b(0) & """" & ";" & """" & b(1)
else
GetPostalCodeAndCity = ";"""";"""""
end if
end function
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";""370 42 TORHAMN"";"
response.write GetPostalCodeAndCity(s)
Du kan göra oändliga kontroller av datat (exempelvis kan du ju med instr kontrollera om det finns två mellanslag i följd i posten som ska innehålla postnummer och ort), men du kan aldrig gardera dig mot allt om indatan håller så dålig kvalité.
Data kommer från ett affärssystem, där de har ovanan att skriva postnummer/ort i samma fält. Det är då upp till användaren att skriva rätt.
Har datat rätt format, så är det ju lätt att dela upp strängen. Är det fel format vill jag ju dock inte att funktionen smäller utan att tex både postnummer och ort läggs på ort. Då syns det ju om det är fel, och man kan gå in och korrigera...
Om det är samma struktur hela tiden så kan du köra RegExp:
<%
Function GetMatch(s)
Dim objRegExp, myMatches
Set objRegExp = New RegExp
objRegExp.IgnoreCase = True
objRegExp.Pattern = """([^""]*)"";""([^""]*)"";""([^""]*)"";""([^""]*)"";""([^""]*)"";"
Set myMatches = objRegExp.Execute(s)
If myMatches.Count >= 1 Then
Set GetMatch = myMatches(0).SubMatches
End If
Set objRegExp = Nothing
End Function
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";""370 42 TORHAMN"";"
Response.Write(GetMatch(s)(4)) '370 42 TORHAMN
Response.Write("<br />")
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";""370 42 TORHAMN"";"
Response.Write(GetMatch(s)(4)) '370 42 TORHAMN
%>
redigerad, ändra + till * om det är så att vissa av fälten kan vara tomma.
function GetPostalCodeAndCity(s)
Dim a
a = split(s, " ")
if ubound(a) = 1 then
GetPostalCodeAndCity = a
else
GetPostalCodeAndCity = Array("", a(0))
end if
end function
...
foo = GetPostalCodeAndCity(MyText)
' foo(0) = postnr
' foo(1) = ort (eller allt, beroende på)
<%
function GetPostalCodeAndCity(s)
Dim a
if instr(s, " ") > 0 then
a = split(s, " ")
if ubound(a) = 1 then
GetPostalCodeAndCity = a
else
GetPostalCodeAndCity = Array("", a(0))
end if
end if
end function
dim s
s=""
foo =GetPostalCodeAndCity(s)
response.write foo(0) & " " & foo(1)
%>
Du få kolla att du inte försöker splitar en NULL objeket, men det känns extremt osäkert när det variera så extremt mycket i dina data.
s = " " funkar ju med men inte ""
matchar ju inget som du har gett oss tidigare. Är omöjligt att ge en korrekt kod som automatiskt löser alla problem om man inte vet vilka typer av data som den kan uppkomma i dina koder.
Nä, jag förstår det... Har varit lite splittrat idag....
Men iaf, Nu kan det inte bli NULL iaf eftersom jag la till en tom sträng på Recordsetet... Rs("foo") & ""
Dock kan det ju bli tomt.
Det kanske inte är svårare än att kontrollera att s inte är tom?
Typ:
<%
function GetPostalCodeAndCity(s)
Dim a
if s <> "" then
a = split(s, " ")
if ubound(a) = 1 then
GetPostalCodeAndCity = a
else
GetPostalCodeAndCity = Array("", a(0))
end if
else
'göra något fint
end if
end function
dim s
s=""
foo =GetPostalCodeAndCity(s)
response.write "foo " & foo(0) & " " & "foo " & foo(1)
%>
function GetPostalCodeAndCity(s)
Dim a
if s <> "" then
a = split(s, " ")
if ubound(a) = 1 then
GetPostalCodeAndCity = a
else
GetPostalCodeAndCity = Array("", a(0))
end if
else
GetPostalCodeAndCity = Array("","")
end if
end function