Avatar billede mettecarsten Nybegynder
02. januar 2007 - 12:59 Der er 14 kommentarer og
1 løsning

Splitte streng i flere informationer

Hej eksperter

Jeg er ved at lave min egen simple statistik for min hjemmeside. Når en bruger kommer fra en søgemaskine, skriver den oplysningerne i min database. Et resultat kunne f.eks. være:

http://www.google.dk/search?q=kroophold&hl=da&lr=&start=20&sa=N

Når jeg i mit eget adminsystem skal have vist resultaterne, vil jeg meget gerne nøjes med kun at se "kroophold", altså værdien af q.

Hvordan kan det kodes i asp?


På forhånd tak.
Avatar billede kalp Novice
02. januar 2007 - 13:26 #1
bare et bud... nu ved jeg nemlig ikke om man må gøre sådan her i regularexpression..
men prøv denne


<%
Function strip(stringTmp)

Set RegularExpressionObject = New RegExp

With RegularExpressionObject
.Pattern = "q=[^&hl=]+&hl="
.IgnoreCase = True
.Global = True
End With

strip = RegularExpressionObject.Replace(stringTmp, "")
Set RegularExpressionObject = nothing

End Function
%>


<%
Response.Write strip("http://www.google.dk/search?q=kroophold&hl=da&lr=&start=20&sa=N")
%>
Avatar billede fennec Nybegynder
02. januar 2007 - 13:29 #2
Eller brug de aldmindelige ASP funktioner:

Hvis vi kan gå ud fra at det altid er det der kommer efter "?q=" kan der laves noget ala dette:

tmp = "http://www.google.dk/search?q=kroophold&hl=da&lr=&start=20&sa=N"
tmpArr = split(tmp,"?q=")
tmp = tmpArr(1)
tmp = left(tmp,inStr(tmp,"&")-1)
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 13:42 #3
Det virker næsten - fedt :-)

Jeg vil helst bruge de almindelige ASP funktioner, så jeg har arbejdet med dit fennec. Lige nu mangler jeg blot en lille detalje - hvordan ændres:

tmp = "http://www.google.dk/search?q=kroophold&hl=da&lr=&start=20&sa=N"

så den henter fra databasen, f.eks.

tmp = rs2("Streng")

Virkelig på forhånd tak
Avatar billede kalp Novice
02. januar 2007 - 13:48 #4
<%
Dim Connection 
Set Connection=Server.CreateObject("ADODB.Connection")

Dim sConnString
sConnString="PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("dinDatabase.mdb")

Connection.Open sConnString

Dim Recordset 
Set Recordset=Server.CreateObject("ADODB.Recordset")

Dim SQL   
SQL="SELECT * FROM dinTabel"

Recordset.Open SQL, Connection

Do While NOT Recordset.Eof 
tmp = Recordset("kolonneNavn");
Recordset.MoveNext   
Loop

Recordset.Close
Set Recordset=Nothing
Connection.Close
Set Connection=Nothing
%>
Avatar billede fennec Nybegynder
02. januar 2007 - 14:05 #5
Har du allerede en kode som udskriver rs2("Streng")??

Det vil være nemmere at indbygge det i din kode med det samme, istedet for at gætte hvordan den ser ud, så hvis du kan vise os hele din eksisterende kode, eller bare det relavante udsnit, vil det være 10-4.

Også kunne vi lige så god smide det i en funktion:
function hentQ(byVal fVal)
dim fArr
  fArr = split(fVal,"?q=")
  fVal = fArr(1)
  hentQ = left(fVal,inStr(fVal,"&")-1)
end function
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 14:10 #6
Når en bruger besøger siden og kommer fra en søgemaskine, oprettes der en ny linie i en tabel i min mysql-database. Efterfølgende henter jeg oplysninger fra databasen med f.eks. <%Response.write rs2("Strenghost")%>. Værdien af <%Response.write rs2("Strenghost")%> er så f.eks. http://www.google.dk/search?q=kroophold&hl=da&lr=&start=20&sa=N. I min visning vil jeg gerne have smidt det overflødige væk og blot få vist indholdet af q. Giver dette mening?
Avatar billede kalp Novice
02. januar 2007 - 14:15 #7
Det er jo det fennec allerede har lavet...

tmp = rs2("Strenghost")
tmpArr = split(tmp,"?q=")
tmp = tmpArr(1)
tmp = left(tmp,inStr(tmp,"&")-1)

og så er det selvfølgelig

response.write(tmp)
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 14:20 #8
Sådan ville jeg også mene, at det skulle laves, men der kommer blot en fejlmeddelelse, Microsoft VBScript runtime error '800a0009'

Subscript out of range: '[number: 1]'

/kadmin/statalledag2.asp, line 77

Hele min kildekode i loopen er:

<%
                        if rs2.bof AND rs2.eof then
                        response.write "<font face='Arial' color='#000000' size='2'>Intet resultat ud fra din søgning</font>"
                        else %>
                        <% a = 1 %>
                            <% Do %>
                            <p>
                        <font face="Arial" size="2" color="#800000">
                        <b><% Response.write a %></b>
                        </font>
                       
                        <% tmp = rs2("Strenghost")
                        tmpArr = split(tmp,"?q=")
                        tmp = tmpArr(1)
                        tmp = left(tmp,inStr(tmp,"&")-1) %>
                       
                        <% response.write(tmp) %>
                       
                        <font face="Arial" size="2">
                        <b><%Response.write rs2("Strenghost")%></b></font><font face="Arial" size="1"> (<%Response.write rs2("Dato")%> - <%Response.write rs2("Tid")%>)</font><br>
                        <% Response.write "<a target='_blank' href = " & rs2("Streng") & ">" & "<font face='Arial' color='#000000' size='1'>" & rs2("Streng") & "</font></b></a>" & "</a>" %>
                        <br>
                        <% a = a + 1 %>
                        <%
                        rs2.MoveNext
                        Loop While Not rs2.EOF
                        %>
                        <% end if %>
Avatar billede fennec Nybegynder
02. januar 2007 - 14:27 #9
Det er så fordi du har værdier i databasen som ikke indeholder "?q=" teksten. Vil gætte på at det ikke er alle der kommer fra google :o)

Vi kan rette funktionen:
function hentQ(byVal fVal)
dim fArr
  if inStr(fVal,"?q=") then
    fArr = split(fVal,"?q=")
    fVal = fArr(1)
    hentQ = left(fVal,inStr(fVal,"&")-1)
  else
    hentQ = fVal
  end if
end function
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 14:32 #10
Pt. tester jeg, så alle resultater kommer fra google. Fennec, er desværre ikke helt med på din rettelse, hvor henter den resultatet fra databasen?
Avatar billede fennec Nybegynder
02. januar 2007 - 14:42 #11
Smid funktionen i toppen eller bunden af din side. Ret så:
<% tmp = rs2("Strenghost")
tmpArr = split(tmp,"?q=")
tmp = tmpArr(1)
tmp = left(tmp,inStr(tmp,"&")-1) %>
<% response.write(tmp) %>

Til:
<%= hentQ(rs2("Strenghost")) %>
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 14:57 #12
Nu virker det vist, måske kun nogle gange. Jeg får lige lavet nogle flere søgninger og ser det hele an. Skal desværre afslutte nu, men tager det op igen i aften - hvor jeg forhåbentlig bare skal tildele point :-)
Avatar billede mettecarsten Nybegynder
02. januar 2007 - 21:22 #13
Det er lidt mystisk det hele - ca. halvdelen af gangene vises resultatet korrekt, mens resten af gangene vises hele adresselinien. Nå, det er fint, som det er, så mange tak for hjælpen. Fennec, smidt et svar :-)
Avatar billede fennec Nybegynder
03. januar 2007 - 08:09 #14
Hvis du kan vise os en side, hvor vi kan se resultatet, kan vi sikkert modificere funktionen, så den gør det rigtigt.

.o) <-- One Eyed Jack
Avatar billede mettecarsten Nybegynder
03. januar 2007 - 11:15 #15
Siden er en del af mit eget administratorsystem, så jeg kan desværre ikke give et link. Jeg har fundet en helt fin mellem-løsning, så mange tak for hjælpen. Pointene er fuld fortjent!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester