Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > ASP > Generella frågor

Konvertera sträng till array

Antasja
Antasja

Gradering

#19999

Hej, jag igen, det har varit ett tag sedan jag var här sist. Men nu har jag stött på ett problem och undrar om någon kan hjälpa mig med det.

Jag har en färdig konverterad sträng som blir t.ex.

&success=yes

och fortsätter med &<variabel>=<variabel> tills det inte finns mer av dem.

Jag behöver hjälp att konvertera dem till en tabell/array, liknande som Request.QueryString har med att man frågar efter vad en nyckel har för variabel.

Och &<nyckel>=<variabel> är ju redan definerade, jag behöver bara hjälp att lägga in dem i en tabell/array, så jag sedan kan få variabeln på ett enkelt sätt.

 

(Jag har min egna SEO url kod som gör det till det där med "&<nyckel>=<variabel>")

Arrayen/Tabellen behöver inte ha strängar som nycklar, men om det är möjligt så skulle jag helst vilja ha det. (Vet inte äns om det är möjligt att ha tabell/array nycklar som strängar?)

Jag har heller inte jobbat någonting med tabeller i ASP, (kanske om det räknas med SQL frågor men) så det här är helt okänt för mig att jobba med..

Tack i förhand, Antasja.

ID: #19999 | Skapades: 2010-07-09 15:15:16 | Tråden har 11 svar och har lästs 298 gånger.

voigtan
voigtan

Gradering

#20000

Kör ett regexp på det och skapa upp ett dictionary som rmmer variabel1 och att dess värde bli variabel2

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #20000 | Skapades: 2010-07-09 16:25:55

Antasja
Antasja

Gradering

#20001

Hur gör man en regexp som delas i två? Rättare sagt hur man gör så att det blir t.ex. DictionaryObject.Add "nyckel", "variabel"

Redigerades av Antasja den 9 juli 2010. Läs tidigare inlägg.
ID: #20001 | Skapades: 2010-07-09 16:39:14

voigtan
voigtan

Gradering

#20002

Set dic = Server.CreateObject("Scripting.Dictionary")
För ditt dictionary, men du kan lösa det med att skapa ett recordset med, fast då loopar du ut ditt recordset om, och om igen, sen är det bara att köra ett regexp uttryck där du hämta ut båda värderna (nykeln och värdet) och loopar igenom alla de träffar du har fått, vad kan dina querystring innehålla och vad kommer dom INTE att innehålla, http://voigt.se/sandbox/regexp/#referense har en bra lista på regexp och hur du kan skriva.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #20002 | Skapades: 2010-07-09 17:04:23

Antasja
Antasja

Gradering

#20003

Tack för svaret, men jag kom på lösningen ändå, att ha "&(.*)=(.*)" som pattern istället för "&(.*?)=(.*?)". Funkar perfekt :)

ID: #20003 | Skapades: 2010-07-09 17:12:11

voigtan
voigtan

Gradering

#20004

Nu vet jag inte om du kommer använda fler en en querystring värde i ditt uttryck, men:

&success=yes&test=fail
Så kommer du få $1 = success och $2 som yes&test=fail

bara så du är medveten om det ;)

[&?]([^=]+)=([^&]+)
är en snabbare lösning och tillåter fler än en querystring träff.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
Redigerades av voigtan den 9 juli 2010. Läs tidigare inlägg.
ID: #20004 | Skapades: 2010-07-09 17:17:41

Antasja
Antasja

Gradering

#20005

Hm, ja. Det matchar fler än 1, men den verkar inte ta den i rätt ordning:

1: Test1
1: Test2
1: Test3
2: Ja
2: Nej
2: Kanske

d.Add hai.Replace(text,"$1"), hai.Replace(text,"$2") verkar inte bli tillagd när det är mer än ett querystring värde

(d = DictionaryObject, hai = regexp object, text = querystringen)

ID: #20005 | Skapades: 2010-07-09 17:30:17

Antasja
Antasja

Gradering

#20006

Finns det något sätt man kan göra d.Add utan att behöva separera dem som jag gör? För det är anledningen till att det blir fel ordning :/

ID: #20006 | Skapades: 2010-07-09 17:44:50

voigtan
voigtan

Gradering

#20007

Gör ett Regexp match och loopar ut matchers istället för att göra en replace, det är inte en regexp replace du är ute efter.

Citat:
Set re = New RegExp
re.Pattern = "[&?]([^=]+)=([^&]+)"
Set Matches = re.Execute(querystringstring)
For Each Match In Matches
    Match.SubMatches(0) ' Querystring ($1)
    Match.SubMatches(1) ' Värde ($2)
Next
Dock så det inte finnas dubeller i querystringen nu.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
Redigerades av voigtan den 9 juli 2010. Läs tidigare inlägg.
ID: #20007 | Skapades: 2010-07-09 18:12:50

Antasja
Antasja

Gradering

#20008

Fattar väldigt lite om regexp och så finns det inga bra tutorials för just ASP's.

Den där match koden du postade ovanför gav bara det första som resultat, även fast det finns flera att skriva ut.

&Test=Funkar&Test2=Funkar+inte

1: Test
2: Funkar

 

ID: #20008 | Skapades: 2010-07-09 18:18:32

voigtan
voigtan

Gradering

#20009

Set re = New RegExp
re.Pattern = "[&?]([^=]+)=([^&]+)"
re.global = True
Set Matches = re.Execute(querystringstring)
For Each Match In Matches
    Match.SubMatches(0) ' Querystring ($1)
    Match.SubMatches(1) ' Värde ($2)
Next

Och visst finns det mer än tillräkligt regexp inom ASP, är dig regexp i vilket språk som helst så kan du tillämpar det till ASP med (med en vissa restruktioner)

regexp.global skall vara satt på true, annars så hämtar den bara ett resultat.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #20009 | Skapades: 2010-07-09 18:28:28

Antasja
Antasja

Gradering

#20010

Tack för all hjälp, nu funkar det exakt som det ska! :)

ID: #20010 | Skapades: 2010-07-09 18:33:12
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy