webForumDet fria alternativet

Tilldela namn på varje värde i array

ASP

27 svar · 1 127 visningar · startad av bigsky

Medlem sedan maj 2002821 inlägg
Frågan#1

Med anledning av tråd http://www.webforum.nu/showthread.php?s=&threadid=125472&forumid=22

dim str, arr, i

str = "1000 41 770 2002-10-18 4 0 0 0 0 0 0 0 5 0 0 {1000/1000-sph.jpg,1000/1000-b.jpg,1000/1000-h.jpg,1000/1000-m.jpg,1000/1000-rs.jpg,1000/1000-sp.jpg}"

str = replace(str, "{", " ")
str = replace(str, "}", " ")
str = replace(str, " ", ",")

arr = split(str, ",")

for i = 0 to ubound(arr)
     response.write(arr(i) & "<br>")
next

Kan man tilldela varje värde i arrayen som står på en egen rad ett namn? Så att jag kan plocka fram ett specifikt värde från arrayen istället för att skriva ut allt?

Tex. att:

Response,Write arr(2,i)

Blir:

770 som ju är det tredje värdet i str.

Medlem sedan maj 2002821 inlägg
#2

Halloooooo! Ekar det här inne eller är det bara jag..?

Medlem sedan juni 200032 967 inlägg
#3

Jag är inte säker på att jag förstår frågan riktigt, men det är ju bara att definiera konstanter som heter det du vill?

Const ett = 1, tva = 2, tre = 3

...

Response.write arr(tre)
Medlem sedan maj 2002821 inlägg
#4

Jag får in en massa text från ett script. Denna info ser ut såhär:

127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0
{100/127-b.jpg
100/127-h.jpg
100/127-m.jpg
100/127-rs.jpg}

134 12 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0
{100/134-b.jpg
100/134-h.jpg
100/134-m.jpg
100/134-rs.jpg}

Vad jag vill göra är att dela upp all information och tilldela dem namn i variablar (fast det går väl inte) eller arrayer så att jag kan använda dem för att skriva ut enskilda värden från informationen. Som det är nu så skrivs det ju ut i hela block så att säga.

Jag ser gärna exempel på kod på hur man ska göra.

Medlem sedan juni 200032 967 inlägg
#5

Det är klart du kan lägga informationen i variabler om du nu vill det? Vad är problemet?

variabel1 = arr(0)
variabel2 = arr(1)
Medlem sedan maj 2002821 inlägg
#6

Problemet är 2 st:

1. Innehållet i arr(0) ska delas upp och läggas in i egna variablar där det är ett mellanrum. Tex "127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0" ska bli variabel1 = 127, variablel2 = 17 osv.

2. Jag vill lista all data i arrayen automatiskt utan att behöva skriva:

response.write arr(1)

För arrayen som den är nu består av kanske över 100 sådana textblock som kommer från scriptet.

Medlem sedan juni 200032 967 inlägg
#7

Du vet alltså inte hur många variabler du vill ha? Hur kan du då använda dem sedan, om du inte vet vad du har?

Du kan ju loopa igenom arrayen istället för att skriva ut var sak för sig.

for i = 0 to ubound(arr)
    Response.write arr(i) & "<br>"
next
Medlem sedan maj 2002821 inlägg
#8

Det är ju sant, men jag fattar bara inte hur jag ska lösa detta. Datan i varje text block står för följande:

1. Produktid
2. Pris 1
3. Pris 2
4. Produktionsdatum
5. Antal nerladdningar
osv.
Resten är sökvägar till produktbilderna

Det jag vill göra är att lista alla produkter snygg med tillhörande text och bilder.

Medlem sedan juni 200032 967 inlägg
#9

Om du vet vad som är vad ser jag inget problem med att tilldela värdena till variabler?

sProdID = arr(0)
sPrice1 = arr(1)
sPrice2 = arr(3)
...

Eller vad missar jag?

Medlem sedan maj 2002821 inlägg
#10

Att arr(0) innehåller hela raden "127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0" när den egentligen bara borde innehålla "127". Och arr(1) borde innehålla "17".

Medlem sedan juni 200032 967 inlägg
#11
nyarr = split(arr(0), " ")
Medlem sedan sep. 20026 425 inlägg
#12
dim str, arr, i
str = "127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0"
arr = split(str," ")

for i = 0 to ubound(arr)
response.write arr(i) & "<br>"
next
Medlem sedan maj 2002821 inlägg
#13

Hmm, börjar likna nåt nu. Om jag inte behöver bildsökvägarna som egentligen står mellan två {} tecken, kan jag ta bort allt som står mellan {} inkl. själva {}?

Så att jag bara får ut en massa rader enligt liknande mönster:

127 12 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0
134 11 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0
139 9 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0
142 10 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0
199 1 254 2002-07-10 5 0 0 0 0 0 0 0 3 0 0

Medlem sedan juni 200032 967 inlägg
#14

Ja, det är bara att splitta på {, och endast använda den första platsen i arrayen.

Medlem sedan maj 2002821 inlägg
#15

Du skulle inte kunna visa hur jag får

127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0 
{100/127-b.jpg
100/127-h.jpg
100/127-m.jpg
100/127-rs.jpg}

till:

127 17 287 2002-07-04 5 0 0 0 0 0 0 0 1 0 0
Medlem sedan juni 200032 967 inlägg
#16

Om din sträng innehåller allt det där så:

sFoo = replace(split(sFoo, "{")(0), vbCrlf, "")
Medlem sedan maj 2002821 inlägg
#17

Får felet:

Microsoft VBScript runtime fel '800a0009'
Subscript out of range: '[number: 0]'

Med:

arr = Split(strHTML, "<br>")
For i = 0 To UBound(arr)
Response.Write Split(Replace(Split(arr(i), "{")(0), vbCrlf, ""), "|")
Next
Medlem sedan juni 200032 967 inlägg
#18

Hmm... Var kommer pipe-tecknen ifrån? Exakt hur ser din sträng ut?

Medlem sedan maj 2002821 inlägg
#19
strBaseUrl = "http://www.template-help.com"
strUrl = strBaseUrl & "/webapi/templates_screenshots4.php?category=10&linebreak=<br>&delim=|&sort_by=date&order=desc"
Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", strUrl, False
objHTTP.SetRequestHeader "Content-type","text/html"
objHTTP.Send
strHTML = objHTTP.ResponseText
Set objHTTP = Nothing
	
arr = Split(strHTML, "<br>")
	
For i = 0 To UBound(arr)
arr2 = Split(Replace(Split(arr(i), "{")(0), vbCrlf, ""), "|")
If arr2(0) =< 99 Then
strFolder = 0
ElseIf arr2(0) =< 199 Then
strFolder = 100
ElseIf arr2(0) =< 299 Then
strFolder = 200
Next

Strängar:

127|17|287|2002-07-04|5|0|0|0|0|0|0|0|1|0|0
{img/img1.jpg}

Medlem sedan juni 200032 967 inlägg
#20

Och exakt hur ser strängen ut?

Edit, där kom de med en liten redigering ja. ;)

- - - - -

Men det finns ju inga pipe-tecken i strängen?

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)