20. juni 2006 - 14:12
Der er
37 kommentarer og 1 løsning
Replace function
Har et community, hvor beskeder kører igennem replace funktioner med smileys, badword m.m. Jeg vil så lave en replace funktion der går ind gå ind og laver et brugernavn om til link Hvis en bruger skriver [brugernavn] skal dette er erstattes med link til den pågældende bruger (eks bruger.asp?User=brugernavn) Hvordan fikser jeg det, når den IKKE skal lave replace bare nårman skriver brugernavn, men først når der står [brugernavn]
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Her hvordan en af mine replaces functions ser ud, Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"","<u>",1,-1,1) strContent = replace(strContent," ","</u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") FontWeight = strContent End Function
jeg skal lige forstå det rigtigt. Du vil have at den skal ændre et brugernavn til et brugernavn med link, hvis en bruger f.eks. skriver [tjaz] og ikke så den bare erstatter det hvis man skriver tjaz rent?
okay, prøv det her: Function nyTekst(tekst) 'Først splitter vi teksten op så vi kan tjekke hvert enkelt ord arrTekst = Split(tekst, " ") 'Så skal vi have testet hvert ord For t = LBound(addTekst) to UBound(arrTekst) 'Først tjekker vi om hvert enkelt ord starter OG slutter med henholdsvis [ og ] if left(arrTekst(t), 1) = "[" AND right(arrTekst(t), 1) = "]" then 'Hvis der er det fjerne vi [ og ] så vi kan tjekke databasen for ordet arrTekst(t) = replace(arrTekst(t), "[", "") arrTekst(t) = replace(arrTekst(t), "]", "") 'Det er så her vi skal have fat i din database for at se om der er en bruger der passer til ordet strSQL = "SELECT * FROM brugere WHERE username = '"& arrTekst(t) &"'" set rs = Conn.Execute(strSQL) 'Hvis vi finder et brugernavn som passer erstatter vi det med et link if not rs.eof then 'Hvis vi finder det erstatter vi det enkelte ord med et link + ordet ofc. arrTekst(t) = "<a href="ditlink.asp">"& arrTekst(t) &"</a>" else 'Hvis ikke skal vi bare bruge ordet alene, hvor vi sætter [ og ] tilbage 'så brugeren evt kan se at han har stavet forkert arrTekst(t) = "["& arrTekst(t) &"]" end if end if 'Herefter smider vi det igennem din egen replace funktion arrTekst(t) = FontWeight(arrTekst(t)) 'Så sætter vi teksten sammen igen (husk mellemrummet som vi før brugte til at splite den ad) nyTekst = nyTekst & arrTekst(t) &" " Next End Fuction 'Du kan nu udskrive det hele response.write nyTekst(rs("tekst"))
rettelse -> End Function :)
Linie: For t = LBound(addTekst) to UBound(arrTekst) Giver fejl: Microsoft VBScript runtime error '800a000d' Type mismatch: 'LBound'
Hvorfor ikke bare gøre det helt simpelt: Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"","<u>",1,-1,1) strContent = replace(strContent," ","</u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT brugerNavn FROM brugere WHERE username = '"& arrTekst(t) &"'" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = rs["brugerNavn"] fra = "[" & brugerNavn & "]" til = "<a href='bruger.asp?User=" & brugerNavn & "'>" & brugerNavn & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
Rettet 2 fejl: Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"","<u>",1,-1,1) strContent = replace(strContent," ","</u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT brugerNavn FROM brugere" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = rs("brugerNavn") fra = "[" & brugerNavn & "]" til = "<a href='bruger.asp?User=" & brugerNavn & "'>" & brugerNavn & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
20. juni 2006 - 19:02
#10
Får jeg fejlen Microsoft VBScript runtime error '800a000d' Type mismatch: 'arrTekst'
20. juni 2006 - 19:03
#11
prøvede den anden du lige skrev, og rettet til med mine oplysninger i database,men den erstatter intet..
20. juni 2006 - 19:05
#12
ret: For t = LBound(addTekst) to UBound(arrTekst) til: For t = LBound(arrTekst) to UBound(arrTekst)
20. juni 2006 - 19:05
#13
Jo gør den da nu, den tager bare ikke højde for store og små bogstaver, hvordan gør jeg det? Så hvis brugernavnet databasen er Lund, og jeg skriver lund med lille L, så finder den ikke min bruger?
20. juni 2006 - 19:10
#14
går du ud fra min eller nielle's nu ?
20. juni 2006 - 19:10
#15
Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"","<u>",1,-1,1) strContent = replace(strContent," ","</u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT lCase(brugernavn) FROM brugere" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = lCase(rs("brugernavn")) fra = "[" & brugerNavn & "]" til = "<a href='bruger.asp?User=" & brugerNavn & "'>" & brugerNavn & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
20. juni 2006 - 19:12
#16
men det primære i det uanset hvilken en af du bruger er, at du får den til at sammenligne med f.eks. lcase()
20. juni 2006 - 19:13
#17
Der er nu ikke brug for to gange LCase :^) Den i SQL-sætningen burde være nok.
20. juni 2006 - 19:14
#18
Nå ja ok - men bare for at være på den sikre side tænkte jeg :-)
20. juni 2006 - 19:16
#19
madeindk: Så vil den ikke tage imod brugerNavn = lCase(rs("brugernavn")) ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal. /functions.asp, line 212 erstatter brugernavn med username, da mit felt i i databasen er username, så nu ser min kode sådan her ud: Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"[u]","<u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT lCase(username) FROM users" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = lCase(rs("username")) fra = "[" & brugerNavn & "]" til = "<a href='./?S=6&M=Profile&ID=" & rs("ID") & "'>" & rs("username") & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
20. juni 2006 - 19:17
#20
Vi har også lige talt om den første lCase var nok - så bare ret: fra: brugerNavn = lCase(rs("username")) til: brugerNavn = rs("username")
20. juni 2006 - 19:18
#21
jep, men stadig det samme med denne kode Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"[u]","<u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT lCase(username),id FROM users" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = rs("username") fra = "[" & brugerNavn & "]" til = "<a href='./?S=6&M=Profile&ID=" & rs("ID") & "'>" & rs("username") & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
20. juni 2006 - 19:20
#22
Hvis brugernavnet senere skal bruges til at hent ud fra databasen igen, så er det nok vigtigt at beholde casen der hvor det er muligt: Function FontWeight(strContent) strContent = replace(strContent,"","<b>",1,-1,1) strContent = replace(strContent," ","</b>",1,-1,1) strContent = replace(strContent,"","<i>",1,-1,1) strContent = replace(strContent," ","</i>",1,-1,1) strContent = replace(strContent,"","<u>",1,-1,1) strContent = replace(strContent," ","</u>",1,-1,1) strContent = replace(strContent, vbcrlf, "<br>") strSQL = "SELECT brugerNavn FROM brugere" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = rs("brugerNavn") fra = "[" & LCase(brugerNavn) & "]" til = "<a href='bruger.asp?User=" & brugerNavn & "'>" & brugerNavn & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop FontWeight = strContent End Function
20. juni 2006 - 19:21
#23
nielle: Jo men så får jeg jo udskrevet brugernavnet i Lowcase? Og det vil jeg ikke..
20. juni 2006 - 19:22
#24
Øhh, nej da. Det gør du ikke. Eller også misforstår jeg hvad du mener?
20. juni 2006 - 19:23
#25
men uanset hvad, får jeg denne fejl ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal. /functions.asp, line 212 linie 212 er brugerNavn = rs("username")
20. juni 2006 - 19:25
#26
Så min kode skal se sådan her ud nu, eller er jeg gal på den? strSQL = "SELECT username,id FROM users" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF brugerNavn = rs("username") fra = "[" & LCase(brugerNavn) & "]" til = "<a href='./?S=6&M=Profile&ID=" & rs("ID") & "'>" & brugernavn & "</a>" strContent = replace(strContent, fra, til) rs.MoveNext Loop
20. juni 2006 - 19:26
#27
Den fejl lyder som om at der ikke er noget felt som hedder "username" i din "users" tabel.
20. juni 2006 - 19:27
#28
20/06-2006 19:25:53> Ser rigtig ud.
20. juni 2006 - 19:27
#29
Det er der, tager jeg ovenstående kode jeg lige har sendt, så virker der fint.. Når jeg smider lCase(username) i sql sætningen, er det den siger der ikke noget der hedder username .. meeeen som sagt, det er der..
20. juni 2006 - 19:28
#30
Kommentar: nielle 20/06-2006 19:27:26: den viker NÆSTEN også.. MEN igen, skriver jeg LunD og brugrnavet hedder Lund i Databasen, så replacer den ikke..
20. juni 2006 - 19:31
#31
Men hvorfor ønsker du da også at kunne skrive [LunD] i din tekst? Du tillader jo f.eks. ikke at man skriver [B] i stedet for [b].
20. juni 2006 - 19:34
#32
Funktionen her strContent = replace(strContent,"[b]","<b>",1,-1,1) Gør at den er ligeglad om du skriver [B] eller [b] så erstatter den alligevel.. Jeg ønsker det da jeg har et community hvor der ikke er en chance for at vide om en bruger hedder lund eller Lund , så ville der være rart med en replace som tagr højde for det.
20. juni 2006 - 19:35
#33
men ellers,så lad os gøre det på en anden måde, at lade være med at tjekke i db. og så bare sige skriver en bruger [lund] så skal jeg have link med ./?S=6&M=Profile&username=lund
20. juni 2006 - 19:40
#34
Er det så ikke bare at rette: strContent = replace(strContent, fra, til) - til: strContent = replace(strContent, fra, til, 1, -1, 1)
20. juni 2006 - 19:42
#35
Jo selvfølgelig,og det virker ;)
20. juni 2006 - 19:45
#36
... og så dropper vi helt brugen af LCase(): strSQL = "SELECT username, id FROM users" Set rs = Conn.Execute(strSQL) Do While Not rs.EoF username = rs("username") fra = "[" & username & "]" til = "<a href='./?S=6&M=Profile&ID=" & rs("ID") & "'>" & brugernavn & "</a>" strContent = replace(strContent, fra, til, 1, -1, 1) rs.MoveNext Loop
20. juni 2006 - 19:46
#37
yes nemlig.. smid du et svar..
20. juni 2006 - 19:47
#38
'så gerne :^)
Kurser inden for grundlæggende programmering