Avatar billede van_gogo Nybegynder
04. marts 2002 - 09:03 Der er 14 kommentarer og
1 løsning

Hvorfor vil den ikke begge gange ?

<%



besked2 = " dam dam dam leverpostej er godt, jeg elsker jette [url]www.pbw.dk[/url] jeg er så lame [url]www.botg.dk[/url]"

response.write besked2 & "<BR>"

start_url = 0
slut_url = 0


For x = 1 to len(Besked2)

    Char = Mid(Besked2, x, 5)
    If Char = "[url]" then
        start_url = (x + 5)                   
end if


Char = Mid(Besked2, x, 6)
    If Char = "[/url]" then
        slut_url = x    
end if

if start_url > 0 and slut_url > 0 then
caption = (slut_url - start_url)
link = mid(besked2, start_url, caption)

test = (start_url - 6)
test2 = (slut_url + 5)
test2 = (len(besked2) - test2)
if not left(link, 7) = "http://" then
link = "http://" & link
end if
link = "<a href='" & link & "' target='_blank'>" & link & "</a>"
besked2 = left(besked2, test) & link & right(besked2, test2)
    start_url = 0
    slut_url = 0

end if

Next


%>

Mit problem er, at den kun vil lave det første link om og ikke det andet.
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:07 #1
ehm ..

lige et sec ...
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:11 #2
Flg. kode vil klare det:

<%
    besked2 = " dam dam dam leverpostej er godt, jeg elsker jette [url]www.pbw.dk[/url] jeg er så lame [url]www.botg.dk[/url]"

    Set Rx = New RegExp
    Rx.Global = True
    Rx.IgnoreCase = True
    Rx.Pattern = "\[url\]([a-z0-9-_\.]+)\[/url\]"
    Response.Write Rx.Replace(besked2, "<a href=""http://$1"" target=""_blank"">$1</a>")

    Set Rx = Nothing
%>
Avatar billede van_gogo Nybegynder
04. marts 2002 - 09:14 #3
Det lærer jeg jo ikke noget af, hvad har jeg gjort forkert oppe i min kode ?
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:35 #4
Well:

1. Jeg har ikke lyst til at gennemgå din kode da den er ineffecient og ligeudsagt dårlig.

2. Min funktion er langt bedre, og undgår problemer med manglende slut tags osv.

Jeg skal gerne forklare hvad den gør:

Rx.Pattern = "\[url\]([a-z0-9-_\.]+)\[/url\]"

Dette er et søgemønster der fortæller Regular Expression "maskinen" (RegExp), at den skal søge efter en streng der ser således ud:

[url][/url]

og i mellem disse to skal der være en streng der kan bestå af tegnene a-z, 0-9, bindestreg, underscore samt punktum.

([a-z0-9-_\.]+)

( og ) gør at RegExp "fanger" den streng imellem, som vi senere kan bruge i Rx.Replace.

[] angiver det tegnsæt som strengen må bestå af. \. betyder at . er escapet. Jeg er ikke sikker på om Microsoft's RegExp forstår . som "et hvilken som helst tegn" i tegnsæt (jeg bruger normalt RegExp i PHP / Perl compatible).

+'et til sidst betyder at der skal være mellem 1 og ? tegn. Dvs. hvis der intet står mellem [url] og [/url] vil der intet blive foretaget, da den ikke vil "finde" det.

Response.Write Rx.Replace(besked2, "<a href=""http://$1"" target=""_blank"">$1</a>")

Rx.Replace() virker lidt på samme måde som ASP's Replace().

.Replace(strengen_der_skal_replaces_i, det_der_skal_replaces_med)

I den sidste parameter har jeg brugt $1. Den angiver den streng som RegExp har "fundet" til mig inden i ( og ). Hvis der havde været flere ( og ) havde man kunnet bruge $2, $3 osv.

$0 vil indeholde hele den "matchede" streng. F.eks. "[url]www.pbw.dk[/url]".
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:47 #5
Du må undskylde, det kan godt være det lyder arrogant måske, men jeg kan ikke *tåle* at have med kode der er så dårligt skrevet, at gøre .. det er derfor jeg foreslår en alternativ og bedre løsning.
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:58 #6
En udgave der er lidt mindre teknisk:

<%
    strMessage = " dam dam dam leverpostej er godt, jeg elsker jette [url]www.pbw.dk[/url] jeg er så lame [url]www.botg.dk[/url]"

    Do
        intStartPos = InStr(intStartPos, strMessage, "[url]")
        If intStartPos = 0 Then Exit Do
        intEndPos = InStr(intStartPos, strMessage, "[/url]")
        If intEndPos = 0 Then Exit Do

        strLink = Mid(strMessage, intStartPos + 5, (intEndPos - intStartPos - 5))
        If Not Left(strLink, 7) = "http://" Then strALink = "http://" & strLink

        strMessage = Replace(strMessage, "[url]" & strLink & "[/url]", "<a href=""" & strALink & """ target=""_blank"">" & strLink & "</a>")
        intStartPos = intEndPos + 5
    Loop

    Response.Write strMessage
%>
Avatar billede invisibleman Nybegynder
04. marts 2002 - 09:59 #7
Hvad du helt præcist gør forkert i din egen kode aner jeg ikke .. den er meget svær at tyde uden at man tester den en masse gange med en masse Response.Write's på for at se outputtet ...

Men nu har du to alternativer ...
Avatar billede invisibleman Nybegynder
04. marts 2002 - 10:00 #8
Ups ..der var en fejl .. her er den korrekte:

<%
    strMessage = " dam dam dam leverpostej er godt, jeg elsker jette [url]www.pbw.dk[/url] jeg er så lame [url]www.botg.dk[/url]"
    intStartPos = 1

    Do
        intStartPos = InStr(intStartPos, strMessage, "[url]")
        If intStartPos = 0 Then Exit Do
        intEndPos = InStr(intStartPos, strMessage, "[/url]")
        If intEndPos = 0 Then Exit Do

        strLink = Mid(strMessage, intStartPos + 5, (intEndPos - intStartPos - 5))
        If Not Left(strLink, 7) = "http://" Then strALink = "http://" & strLink

        strMessage = Replace(strMessage, "[url]" & strLink & "[/url]", "<a href=""" & strALink & """ target=""_blank"">" & strLink & "</a>")
        intStartPos = intEndPos + 5
    Loop

    Response.Write strMessage
%>
Avatar billede invisibleman Nybegynder
04. marts 2002 - 10:26 #9
Jeg tror jeg har fundet ud af dit problem. Når du splitter strengen besked2 ad og lægger noget til den bliver den jo større, men det forstår Len(besked2) i

For .. To Len(besked2)

ikke, da den bliver gemt i en midlertidig variabel der ikke kan ændres.
Avatar billede invisibleman Nybegynder
04. marts 2002 - 10:29 #10
Den sidste metode jeg har kunnet lave er med For..Next, omendt den ingen fordele har fremfor hverken Do..Loop eller RegExp metoden kan jeg lige så godt vise den:

    ' Replace with For..Next
    strMessage = " dam dam dam leverpostej er godt, jeg elsker jette [url]www.pbw.dk[/url] jeg er så lame [url]www.botg.dk[/url]"
    strFMessage = strMessage
    intStartPos = 0
    intEndPos = 0

    For intIndex = 1 To Len(strMessage)
        If Mid(strMessage, intIndex, 5) = "[url]" And intEndPos = 0 Then intStartPos = intIndex + 5
        If Mid(strMessage, intIndex, 6) = "[/url]" And intIndex > intStartPos Then intEndPos = intIndex

        If intStartPos > 0 And intEndPos > 0 And intEndPos > intStartPos Then
            strLink = Mid(strMessage, intStartPos, intEndPos - intStartPos)
            If Not Left(strLink, 7) = "http://" Then strALink = "http://" & strLink Else strALink = strLink

            strFMessage = Replace(strFMessage, "[url]" & strLink & "[/url]", "<a href=""" & strALink & """ target=""_blank"">" & strLink & "</a>")

            intStartPos = 0
            intEndPos = 0
        End If
    Next

    Response.Write strFMessage
Avatar billede invisibleman Nybegynder
04. marts 2002 - 10:34 #11
Her alle 3 metoder samlet i een fil:

http://www.fejl.com/user_files/533/180563_url_replace.txt
Avatar billede invisibleman Nybegynder
04. marts 2002 - 10:35 #12
(lav en View Source)
Avatar billede van_gogo Nybegynder
04. marts 2002 - 12:47 #13
tak :) må sige, at du er gået i dybden :)
Avatar billede invisibleman Nybegynder
04. marts 2002 - 19:06 #14
Well, nu du sagde du ikke lærte meget af mit RegExp tænkte jeg at jeg ville se om det var muligt at lave noget mindre teknisk .. og så gik det bare sårn lidt på "samlebånd" *G*
Avatar billede van_gogo Nybegynder
05. marts 2002 - 15:24 #15
nå men tusind tak for hjælpen endnu engang :)
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