webForumDet fria alternativet

ta ut strängar ur strängar...

ASP

5 svar · 259 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Sitter och skall göra en ändring i ett gammalt asp system och minnet är kort.

Jag har en sträng som ibland innehåller antal och ibland så innehåller den vikt och oftast så strår de tillsammans.

enligt
0001 pieces , 0000040 kg , status och annan text
0001 pieces status och annan text <--- notera inget komma!
0000040 kg , status och annan text

pieces = altid 4 karaktärer.
kg = 7 karaktärer + kg

Detta formateras via en gammal dll som vi inte har kvar koden till och jag har ingen lust att koda om den då den är väldigt omfattande.

Till problemet.

Jag vill inte visa vikten över huvud taget sen så vill jag ha bort nollorna före antal pieces.

Hur skall jag göra? mid? left? regExp??

mycket tacksam för tips och ideer.

Medlem sedan nov. 20017 144 inlägg
#2

Det kanske går att göra med någon snygg regexp men detta är iaf ett litet försök.

Dim str, pieces, kg
str="0001 pieces , 0000040 kg"
If instr(str,"pieces") > 0 then
	pieces = split(str,"pieces")
	Response.write FormatNumber(left(pieces(0),4),0) &" st "
End if
If instr(str,"kg") > 0 then
	kg = split(str,"kg")
	Response.write FormatNumber(right(kg(0),7),1) &" kg "
End if
Medlem sedan nov. 20017 144 inlägg
#3

Alternativt:

str="0001 pieces , 0000040 kg"
instrpieces = instr(str,"pieces")
If instrpieces > 0 then
	Response.write FormatNumber(mid(str,instrpieces-5,4),0) &" st "
End if
instrkg = instr(str,"kg")
If instrkg > 0 then
	Response.write FormatNumber(mid(str,instrkg-8,7),1) &" kg "
End if

Eller, skjut och titta:

On error resume next
	Response.write FormatNumber(mid(str,instr(str,"pieces")-5,4),0) &" st "
	Response.write FormatNumber(mid(str,instr(str,"kg")-8,7),1) &" kg "
Medlem sedan juli 2001514 inlägg
#4

Problemet är att vikten inte alltid är 000040 och antal inte alltid är 0001, de varierar hela tiden beroende på söksvar.

Medlem sedan dec. 20025 483 inlägg
#5

Ett regexp-försök:

dim rslt
dim re : re = new regexp

re.ignorecase = true
re.global = true

re.pattern = "\d{7}\skg(\s,)?"
rslt = re.replace([i]replaceString[/i], "")

re.pattern = "0*(\d+\spieces)(\s,)?"
rslt = re.replace(rslt, "$1")

set re = nothing

Ovan har jag antagit att datat finns i replaceString.

Red./ Har redigerat in re.global = true ovan.

Medlem sedan juli 2001514 inlägg
#6

Bugar och bockar.

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)