/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Replace & Arrays
Fra : Jacob ..


Dato : 30-11-06 17:26

Jeg har et forum der henter indlæg fra en tabel (tblIndlaeg) i en
Access database:

rsA("Text") som giver en streng af ord.

Nu vil jeg gerne matche denne streng op i mod en anden tabel
(tblBandeord) der indeholder et antal poster som skal matches og
de ord fra rsA("Text") der matcher ska formateres i outputtet.

Jeg har forsøgt mig frem men det tætteste jeg umiddelbart kommer
er at strengen matches op i mod den *sidste* post fra
tblBandeord:

tblIndlaeg indeholder følgende sætning:
"Du er en ulækker og grim person"

tblBandeord indeholder følgende ord/poster: ulækker, grim

Så sætningen jeg vil ha' ud af det er:
"Du er en *BANDEORD* og *BANDEORD* person"

<code>sometext="" & rsA("Text") & ""

SQL = "Select * FROM tblBandeord"
Set rsB = Conn.Execute(SQL)

Do While Not rsB.EOF
Array1 = "" & Replace(sometext, "" & rsB("Bandeord") & "",
"*BANDEORD*") & ""
rsB.MoveNext
Loop

Response.write "" & Array1
</code>

Den sætning jeg får ud af ovenstående er:
"Du er en ulækker og *BANDEORD* person"

Så det tyder på, at der kun matches op i mod sidste post i
tblBandeord.

Kan nogen hjælpe mig videre?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jens Gyldenkærne Cla~ (30-11-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-11-06 22:20

Jacob .. skrev:

> rsA("Text") som giver en streng af ord.
>
> Nu vil jeg gerne matche denne streng op i mod en anden tabel
> (tblBandeord) der indeholder et antal poster som skal matches og
> de ord fra rsA("Text") der matcher ska formateres i outputtet.

Regexp er din ven.

Her kommer først en udgave med en fast liste af bandeord:

Function ErstatBandeOrd(tekst)
   const ordliste = "røv|pik|kusse"
   Dim rgx
   Set rgx = New RegExp
   rgx.Pattern = ordliste
   rgx.Global = True
   rgx.IgnoreCase = True
   ErstatBandeOrd = rgx.replace(tekst, "*bandeord*")
End Function

Den erstatter alle tre ord i listen med *bandeord* i ét hug.

Du skal så bare have genereret ordlisten fra din tabel. I første
omgang skal ordliste sættes ud som en parameter til funktionen:

Function ErstatBandeOrd(tekst, ordliste)
   ...
End Function

Ordlisten skal så laves fra din database. Det kan gøres fikst og
hurtigt med .GetString (se fx
<http://www.w3schools.com/ado/met_rs_getstring.asp>)

strSQL = "SELECT bandeord FROM tblBandeord ORDER BY bandeord"

Set rs = Conn.Execute (strSQL)

strOrdliste = rs.GetString(,,,"|","")

Response.write (ErstatBandeOrd(strTekst, strOrdliste))
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (02-12-2006)
Kommentar
Fra : Jacob ..


Dato : 02-12-06 09:55

> Function ErstatBandeOrd(tekst)
>    const ordliste = "røvpikkusse"
>    Dim rgx
>    Set rgx = New RegExp
>    rgx.Pattern = ordliste
>    rgx.Global = True
>    rgx.IgnoreCase = True
>    ErstatBandeOrd = rgx.replace(tekst, "*bandeord*")
> End Function

Tak for svaret, Jens.

Når jeg forsøger denne. får jeg:

Syntax error

ContentDict.asp, line 92

Function ErstatBandeOrd(tekst)
^?



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (02-12-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-12-06 12:27

Jacob .. skrev:

> Når jeg forsøger denne. får jeg:
>
> Syntax error
>
> ContentDict.asp, line 92
>
> Function ErstatBandeOrd(tekst)
> ^?

Har du placeret funktionen inde i en logisk blok (fx en if-
sætning)?

Prøv at sætte den øverst (under option explicit, som du
selvfølgelig anvender
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (02-12-2006)
Kommentar
Fra : Jacob ..


Dato : 02-12-06 12:45

> Har du placeret funktionen inde i en logisk blok (fx en if-
> sætning)?

Den var i loopet som havde en IF sætning. Er flyttet, men får
ikke noget resultater ud af det. Det hele ser således ud:

Function ErstatBandeOrd(tekst, ordliste)

set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("Turtle.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
rs.Open "SELECT DicWord FROM tblDic", conn

ordliste = "" & rs.GetString(,,"",""," ") & ""
Dim rgx
Set rgx = New RegExp
rgx.Pattern = ordliste
rgx.Global = True
rgx.IgnoreCase = True
ErstatBandeOrd = rgx.replace(tekst, "*bandeord*")
End Function

Og i loopet:

Response.write (ErstatBandeOrd(rsMenu("ContentText"), ordliste))

Hvis jeg skriver "const" foran "ordliste" i functionen får jeg en
fejl ("Name redefined"):?

> Prøv at sætte den øverst (under option explicit, som du
> selvfølgelig anvender

Jo da - i hvert fald nu ;)


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (02-12-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-12-06 23:19

Jacob .. skrev:

> Function ErstatBandeOrd(tekst, ordliste)

- ordliste er (korrekt) angivet som parameter til funktionen.


> ordliste = "" & rs.GetString(,,"",""," ") & ""

- men så skal du ikke sætte værdien af ordliste inde i funktionen.
Ideen er at du opbygger strengen til ordliste uden for funktionen
og så benytter den når funktionen skal kaldes.

I øvrigt er den fjerde parameter til GetString forkert - du skal
have en lodret streg (|) ind mellem ordene hvis funktionen skal
behandle dem som forskellige ord.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste