Avatar billede ChristianG Nybegynder
13. juni 2009 - 19:20 Der er 11 kommentarer og
1 løsning

Replace af ord med asp side

Hej alle gode ASP eksperter.
Jeg har i længere tid tumlet med en måde til at gøre følgende; men kan ikke finde løsningen.

Forestil dig en brødtekst, der bliver hentet fra en database og sendt til brugerns browser.

På et tidspunkt når vi under afvikling i asp scriptet frem til et specielt ord. Ordet kan være hvad som helst, men lad os antage at det er "sismofyt".

Jeg ønsker nu at erstatte ordet med indholdet af en anden asp side.

Det kan sagtens lade sig gøre at erstatte ordet med andre ord med ASP replace funktionen; men jeg ønsker altså ordet erstattet med en hel fil.

Herved kan jeg dynamisk indsætte indholdet af denne side præcis der, hvor jeg skriver "sismofyt"

Dette er det vigtigste, for hermed behøver jeg ikke at skrive en laaang streng i "replace" funktionen.

Hvis det lykkes at hente en dynamisk asp side ind som erstatning for ordet det erstatter ja, så vil mer jo have mer ;o)

Og så kunne det være rigtig fedt hvis man også kunne overføre variabler til asp siden.

Det nederste fra denne side kan muligvis indgå i løsningen
http://www.webmasterworld.com/forum47/1298.htm

Det store spørgsmål er, hvordan får man med replacefunktionen på en tekst erstattet "sismofyt" med indholdet her.

Jeg håber, at spørgsmålet er klart og ser frem til en god løsning. Vinderen kan forøvrigt forvente at få forskellige betalte opgaver i årene fremover; for den der løser denne opgave er en haj ;o)

Venlig hilsen,
Christian
Avatar billede thesurfer Nybegynder
13. juni 2009 - 23:29 #1
Ved brug af f.eks. InStr, Left, Mid, Right, og XMLHTTP burde man kunne løse opgaven.

Eksempel (løst eksempel med plads til forbedringer):

1)
data = "bla bla bla sismofyt bla bla bla"

2)
If InStr(data, "sismofyt") > 0 then
... yep.. variablen "data" indeholder ordet "sismofyt"
End if

3)
a = left(data, instr(data, "sismofyt"))
b = mid(data, instr(data, "sismofyt") + 1 + len("sismofyt"))

4)
Opret XMLHTTP objektet og hent din "dynamiske side"
F.eks. "MinDynamiskeSide.asp?keyword=sismofyt"
r = response fra dit XMLHTTP objekt

5)
output = a & r & b

6)
Gentag proceduren for samtlige keywords (keyword er f.eks. "sismofyt")

7)
Når alt er ok, send siden til browseren
Avatar billede thesurfer Nybegynder
13. juni 2009 - 23:32 #2
PS: Det kan godt være, at man ikke skal bruger "+ 1" med Mid..

Jeg skriver gerne en "tekstbaseret" forklaring på koden/fremgangsmåden, hvis det ønskes..
Avatar billede ChristianG Nybegynder
14. juni 2009 - 16:00 #3
Hej Thesurfer.

Det lader til, at jeg ikke kan poste indlæg på Eksperten.dk i Internet Explorer.

Havde skrevet et længere svar men det ser ud til at virker i Firefox....

Det ser rigtigt godt ud så jeg tester på livet løs og vender tilbage i løbet af dagen :-)

Mvh,
Christian
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:35 #4
Ja, der er et problem med kombinationen "Internet Explorer 6 + Eksperten.dk".

Problemet ligger ikke i IE6, men i den måde man har valgt at lave "opret"-knappen fra Ekspertens side..

Jeg lavede nogle tests med IE6 + eksperten.dk for noget tid siden..
Så vidt jeg husker, kommer indlæggene igennem.. siden bliver bare ikke opdateret..

Men det kan jeg se at det ikke er sket her.. mærkeligt..


Forresten, endnu et forslag.

Det kan godt være, at det bliver nemmere, hvis man splitter dataene ved keyword, og opretter dermed en array..

Eksempel:

dim arr


if instr(data, "sismofyt") > 0 then

dim arr, tmp

tmp = ""

arr = split(data, "sismofyt")

for i = lbound(arr) to ubound(arr)

tmp = tmp & arr(i) & HentViaXMLHTTP("sismofyt")

next

end if

Eller noget i den stil.. smag og behag..



Nyttige links:


String manipulation:

http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#string

Array funktioner:

http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#array

Generelt:

http://www.w3schools.com/vbscript/vbscript_ref_functions.asp
Avatar billede ChristianG Nybegynder
14. juni 2009 - 16:45 #5
Tak for svaret...
Det lyder også godt. Er lige ved at "enten have hul igennem" eller "banke ind i en væg" ;o)
Avatar billede ChristianG Nybegynder
14. juni 2009 - 17:17 #6
Ser ud til at virke -har endnu ikke prøvet at poste variabler, men der er noget skævt:
Resultatet medtager et tegn i starten før objektet, fjerner, s´et i sismofyt og medtager et tegn i slutningen af sismofyt.

Er klar over, at jeg lige skal replace sismofyt med blank til sidst; men det må lige rettes ind først ;o)
Avatar billede thesurfer Nybegynder
14. juni 2009 - 17:40 #7
Hvordan ser din kode ud, og hvordan ser dit output ud?


Hvis muligt, smid et link til siden.

Hvis du foretrækker ikke linke til siden (offentligt), send mig en intern besked/post via linket "Send en intern besked til brugeren" under min profil.
Avatar billede ChristianG Nybegynder
14. juni 2009 - 17:58 #8
Trigger i teksten er <kontaktformular>

Oversættes til: &lt;kontaktformular&gt;

data = rsList("Body1a")

'2)
'If InStr(data, "&lt;kontaktformular&gt;") > 0 then
'... yep.. variablen "data" indeholder ordet "&lt;kontaktformular&gt;"
           
'3)
a = left(data, instr(data, "&lt;kontaktformular&gt;"))
b = mid(data, instr(data, "&lt;kontaktformular&gt;") + 1 + len("data"))

'4)
'Opret XMLHTTP objektet og hent din "dynamiske side"
'F.eks. "MinDynamiskeSide.asp?keyword=sismofyt"
r = "Her er response fra dit XMLHTTP objekt"

'5)
output = a & r & b

output = replace(output, "ontaktformular&gt;", "")

'6)
'Gentag proceduren for samtlige keywords (keyword er f.eks. "sismofyt")

'7)
'Når alt er ok, send siden til browseren
Response.write output

'End if

'2) slut           
End if



Output:

tekst tekst.

&Her er response fra dit XMLHTTP objektk



tekst tekst.

Jeg kunne kun replace når jeg fjernede k' et i kontaktformular
Avatar billede ChristianG Nybegynder
14. juni 2009 - 18:04 #9
Har lige fjernet <> i kontaktformular og i script

Så ser output sådan ud når jeg endnu ikke replacer:

tekst tekst.

kHer er response fra dit XMLHTTP objektktformular


tekst tekst.
Avatar billede thesurfer Nybegynder
15. juni 2009 - 02:18 #10
Jeg har lavet en funktion, der tager 3 parametere:

1: Teksten der skal arbejdes med, som indeholder nøgleordet

2: Selve nøgleordet (f.eks. "sismofyt")

3: True/False, Fortæller funktionen om der er forskel på store og små bogstaver (er "hej" det samme som "HEj"?)

Funktionen kaldes sådan her:

' false = "Hej" er det samme som "HeJ"
variabelnavn = Parse(variabelnavn, "sismofyt", false)

' true = "Hej" er IKKE det samme som "HeJ"
variabelnavn = Parse(variabelnavn, "sismofyt", false)



Som du kan se i min kode, kan du have flere nøgleord i samme tekst, og også bruge mellemrum! (i mit eksempel: "siSmofyt" og "Hello World")



Husk at rette "URL" til, i funktionen GetInclude!



Kode:


<%

Function GetInclude(keyword)
    ' Kilde: http://www.4guysfromrolla.com/webtech/110100-1.shtml

    Dim URL


    ' Adressen på siden der laver et opslag med nøgleordet.
    ' RET DENNE HER:

    URL = "http://localhost/merge/include.asp?keyword=" & keyword



    Dim objXMLHTTP, xml, r
    Set xml = Server.CreateObject("Microsoft.XMLHTTP")
    'Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xml.Open "GET", URL, False
    xml.Send
    r = xml.responseText
    Set xml = Nothing
    GetInclude = r
End Function

Function Parse(text,keyword,isCaseSensitive)
    ' isCaseSensitive - true  : der er forskel på store og små bogstaver
    ' isCaseSensitive - false : der er IKKE forskel på store og små bogstaver

    Dim intCompareMode
    If isCaseSensitive = True Then
        intCompareMode = 0
    Else
        intCompareMode = 1
    End If

    Dim i, tmp

    Dim strIncluded : strIncluded = GetInclude(keyword)

    Dim arr : arr = Split(text, keyword, -1, intCompareMode)

    For i = LBound(arr) To UBound(arr)

        tmp = tmp & arr(i)

        If i < UBound(arr) Then tmp = tmp & strIncluded

    Next

    Parse = tmp

End Function

Dim data

data = "bla bla bla siSmofyt bla Hello World bla bla <kontaktformular> woohoo!"



data = Parse(data, "sismofyt", false)

data = Parse(data, "Hello World", false)

data = Parse(data, "<kontaktformular>", false)



response.write data
%>
Avatar billede ChristianG Nybegynder
16. juni 2009 - 23:53 #11
Hej Thesurfer.

Så er det lykkedes at få det til at spille...

Smid et svar, så er der 200 points i kassen.
Og så må du gerne lige give dig til kende med en pm, kunne sagtens forestille mig, at jeg vil købe dine kompetancer en gang imellem.

Mvh,
Christian
Avatar billede thesurfer Nybegynder
17. juni 2009 - 01:32 #12
Så smider jeg da et svar :-)
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