webForumDet fria alternativet

Split

14 svar · 843 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Har en kod som splittar en sträng vid i 2 delar vid 2 nollor men nu så har jag sett att den splittar fel när det innehåller 0 nollor på rad. Hjälp tack.

Ex på kod:
300045

30 skall vara en sträng och 45 skall vara en

De två nollorna före 45 skall man splitta via. Hur gör jag?

Min kod nu:

strKod    = "300045"
arrStr    = Split(strKod,"00")
strV1     = arrStr(0)
strV2     = arrStr(1)
Engine^Medlem sedan dec. 20003 887 inlägg
#2

Split() gör inte fel. Funktionen gör precis vad du säger att den ska göra.

Just detta exempel kan du lösa med regular expression

pattern = "\d{2}"

Men jag har en känsla av att din sträng inte alltid ser ut på detta sätt.

Så - på vilka olika sätt kan strängen vara utformad?

AsaMedlem sedan dec. 20011 860 inlägg
#3

Okej!
Det skall alltid finnas två nollor i mitten som skall splittas via och inte skall finnas med i nåt värde. Sen före nollorna kan vara 5 siffror och de siffrorna efter kan vara upp till 5 siffror.

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Aha. Då är ett krav att den andra delen (siffrorna efter 00) inte får börja med noll och att dubbelnoll inte får förekomma i de nummer du vill ha ut (en ganska svår begränsning).

arrStr = split( left( strTest, instr( strtest, "00" ) ) & "," & mid( strTest, instrrev( strtest, "00" ) + 2 ), "," )

Jag föreslår att du försöker hitta en annan metod :)

AsaMedlem sedan dec. 20011 860 inlägg
#5

Hur tycker du man ska göra? Det måste vara siffror.

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Att "00" alltid ligger i mitten innebär att antalet tecken alltid är jämnt. Då

s = (len(strKod) - 2) / 2
strV1 = left(strKod, s)
strV2 = right(strKod, s)
AsaMedlem sedan dec. 20011 860 inlägg
#7

Tack för det! Jag ska alltså skriva?

strKod    = "300045"
s           = (len(strKod) - 2) / 2
strV1      = left(strKod, s)
strV2      = right(strKod, s)

Hmm, detta kan inte funka heller då det kan vara från 1 till X siffror före dessa 00 och efter dessa 00.

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Asa skrev:

Tack för det! Jag ska alltså skriva?

Yes!

Asa skrev:

Hmm, detta kan inte funka heller då det kan vara från 1 till X siffror före dessa 00 och efter dessa 00.

Varför inte?

@ndersMedlem sedan juni 200032 969 inlägg
#9

Hmm, detta kan inte funka heller då det kan vara från 1 till X siffror före dessa 00 och efter dessa 00.

Varför inte? Om nollorna är i mitten så borde det ju funka? Annars kan du ju använda InstrRev() och ta reda på var 00 ligger (bakifrån, så det första talet kan sluta på noll.

Det smartaste lär väl dock vara att använda en separator som faktiskt är en separator...

AsaMedlem sedan dec. 20011 860 inlägg
#10

Vet dock inte hur InstrRev funkar...

Man ska kunna knappa in siffrorna via sin telefon..

@ndersMedlem sedan juni 200032 969 inlägg
#11

Man ska kunna knappa in siffrorna via sin telefon..

Kan man inte använda # eller * då?

TroxyMedlem sedan mars 20041 505 inlägg
#12

Det här kanske blir lite omständigt, men det är i alla fall en ordentlig regexp-koll...

<%

sCode = "133700666"

Set oRegExp = New RegExp
oRegExp.Pattern = "^(\d+)00(\d+)$"
If oRegExp.Test(sCode) Then
	sMatch1 = oRegExp.Execute(sCode).Item(0).Submatches.Item(0)
	sMatch2 = oRegExp.Execute(sCode).Item(0).Submatches.Item(1)
End if
Set oRegExp = Nothing

%>
Peter SMedlem sedan dec. 20025 483 inlägg
#13

Troxy skrev:

Det här kanske blir lite omständigt, men det är i alla fall en ordentlig regexp-koll...

<%

sCode = "133700666"

Set oRegExp = New RegExp
oRegExp.Pattern = "^(\d+)00(\d+)$"
If oRegExp.Test(sCode) Then
	sMatch1 = oRegExp.Execute(sCode).Item(0).Submatches.Item(0)
	sMatch2 = oRegExp.Execute(sCode).Item(0).Submatches.Item(1)
End if
Set oRegExp = Nothing

%>

Problemet är ju att fler än två nollor efter varandra kan existera. I ditt exempel ligger ju heller inte nollorna i mitten varför hela strängen består av ett ojämnt antal tecken.

DenkanMedlem sedan juni 2002256 inlägg
#14

Asa skrev:

Hmm, detta kan inte funka heller då det kan vara från 1 till X siffror före dessa 00 och efter dessa 00.

Då är det tyvärr omöjligt att ta reda på värdena, då både första och andra delen kan innehålla en eller flera nollor.

Engine^Medlem sedan dec. 20003 887 inlägg
#15

Svaret på denna fråga är alltså att istället för att användarna matar in valfritt antal siffror före och efter de två nollorna, så måste de mata in ett bestämt antal. Förslagsvis så börjar dessa (idnummer eller vad det nu är) alltid på 1. Addera t.ex. 100000 till alla dessa nummer så slipper du bekymmer med försvinnande nollor.

Då behöver du ingen avgränsare (men det är alltid bra med #) :)

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)