---
title: "Hantera tomma 'strängar'"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/180604-hantera-tomma-strängar"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2009-10-07T17:40:40.000Z"
updated: "2009-10-09T06:24:17.000Z"
replies: 17
views: 866
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/180604-hantera-tomma-strängar"
---

# Hantera tomma 'strängar'

## #1 — devotion, 2009-10-07T17:40Z

Har två funktioner enligt:

```
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:

```
"kundnummer";"kundnamn";"adress1";"Adress2";"PostnummerOrt";
```

PostnummerOrt har formatet; '370 42  Torhamn' dvs 2 mellansteg mellan postnummer och ort.

Först körs funktion 1 på strängen, sen funktion 2

enligt:

```
foo = GetPostalCodeAndCity(GetPostalAddress(s))
```

Problemet är när PostnummerOrt är tom, då funktionen ballar ur...

Hur hanterar man det?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/180604

## #2 — voigtann1, 2009-10-07T18:39Z

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)...

Permalänk: https://www.webforum.nu/p/2207243

## #3 — devotion, 2009-10-07T18:56Z

fötydligande:
felaktigt matrisindex: '\[number: 1\]'  --\> "ballar ur"

 ;)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207246

## #4 — devotion, 2009-10-07T20:01Z

> **[voigtann1 skrev:](https://www.webforum.nu/p/1483288)**
>
> 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)
```

Funkar bra på:

```
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";""370 42  TORHAMN"";"
```

och:

```
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";"""";"
```

Men smäller på:

```
s="""kundnummer"";""kundnamn"";""adress1"";""Adress2"";""370 42 TORHAMN"";"
```

Dvs om det bara är ett mellanslag mellan postnummer och ort...

Hur kan man fixa det?

Mvh
henrik

Permalänk: https://www.webforum.nu/p/2207257

## #5 — @nders, 2009-10-08T02:48Z

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é.

Varifrån kommer datat?

Permalänk: https://www.webforum.nu/p/2207271

## #6 — devotion, 2009-10-08T05:44Z

Hej,

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...

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207274

## #7 — @nders, 2009-10-08T06:25Z

Ok, ett alternativ då:

Kontrollera att det finns två mellanslag mellan postnummer och ort - annars, returnera ett felmeddelande som du tar om hand och visar användaren.

Permalänk: https://www.webforum.nu/p/2207275

## #8 — devotion, 2009-10-08T06:32Z

> **[@nders skrev:](https://www.webforum.nu/p/1483325)**
>
> Ok, ett alternativ då:
> 
> Kontrollera att det finns två mellanslag mellan postnummer och ort - annars, returnera ett felmeddelande som du tar om hand och visar användaren.

Jag vill att detta skall kunna köras med automatik, så helst inga felmeddelanden... :)  

Däremot, att allt läggs i samma fält (ort) om det inte finns två mellansteg...

 :)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207276

## #9 — voigtann1, 2009-10-08T06:36Z

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.

Permalänk: https://www.webforum.nu/p/2207278

## #10 — Peter S, 2009-10-08T10:11Z

```
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å)
```

Permalänk: https://www.webforum.nu/p/2207294

## #11 — devotion, 2009-10-08T15:04Z

Hepp!

Får

```
Körningsfel i Microsoft VBScript

Ogiltig användning av Null: 'split'
```

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207343

## #12 — devotion, 2009-10-08T15:40Z

Hur får jag följande att fungera:

```
<%

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)

%>
```

Dvs om det är en tom sträng?

Övriga fall funkar finfint..

PLEASE!!

Mvh
henrik

Permalänk: https://www.webforum.nu/p/2207344

## #13 — voigtann1, 2009-10-08T15:46Z

Kolla om den har värdet InStr, du vill ju inte splitar om det inte finns.

Permalänk: https://www.webforum.nu/p/2207345

## #14 — devotion, 2009-10-08T16:03Z

Men, hur ser det ut i koden?

jag tycker jag testat allt...

s = " " funkar ju med men inte ""

 :(

Mvh
henrik

Permalänk: https://www.webforum.nu/p/2207348

## #15 — voigtann1, 2009-10-08T18:46Z

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.

Permalänk: https://www.webforum.nu/p/2207360

## #16 — devotion, 2009-10-08T20:08Z

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)

%>
```

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207366

## #17 — voigtann1, 2009-10-09T04:44Z

```
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
```

Permalänk: https://www.webforum.nu/p/2207376

## #18 — devotion, 2009-10-09T06:24Z

Så här i Nobeltider: "ÄNTLIGEN!"

Tack som fan! :)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2207385

---

Tråden på webben: https://www.webforum.nu/amne/asp/180604-hantera-tomma-strängar
