25. august 2006 - 22:40Der er
13 kommentarer og 1 løsning
Fra [pic] til <img> med forskellige værdier
Jeg bruger følgende kode til at ændre [pic id=xxx] til en <img src="...">, men jeg kunne godt tænke mig at den kunne se om billedet skulle højre, venstre eller center justeres.
Altså [pic id=123 left] bliver til: <img src=".." align="left">
Og [pic id=123 center] bliver til: <center><img src=".."></center>
Jeg ved godt jeg kan lave 4 kopier af koden med hver sin justering, men det ville være nemmere hvis det hele blev klaret i en kode. Der skal som sagt være 4 mulige måder at skrive [pic] på: [pic id=x] og [pic id=x right] = Højre [pic id=x left] = venstre [pic id=x center] = center
Set re = New RegExp re.Global = True re.Pattern = "\[pic id=(\d+)]" Set matches = re.Execute(memotext)
For Each match In matches id = match.SubMatches(0)
sql = "select * from gallery where gID=" & id Set rsPicture = ConnMain.Execute(sql)
Set re = New RegExp re.Global = True re.Pattern = "\[pic id=(\d+)( [^]]*)?]" Set Matches = re.Execute(memotext)
For Each Match In Matches id = Match.SubMatches(0)
align = Match.SubMatches(1) If "" & align = "" Then align = "right"
sql = "SELECT * FROM gallery WHERE gID=" & id Set rsPicture = ConnMain.Execute(sql)
If Not rsPicture.EOF OR Not rsPicture.BOF Then link = "<img src='files/users/user_" & rsPicture("gUploadedBy") & "/pictures/" & rsPicture("gThumbnail") & "' align='" & align & "'>" End If
memotext = Replace(memotext, Match, link) a = a+1 Next
Synes godt om
Slettet bruger
26. august 2006 - 09:28#5
Så langt der er jeg også kommet på en måde, men mit problem er at hente værdien ud af [pic].
Eks på et pic. [pic id=123 center]
Den henter værdien id med d+, jeg skal så bare have den til at teste om der er en justeringsværdi og i det tilfælde hvilken...
Så ser det ud til at virke, rettede lige lidt i pattern, da din kode lavede mellemrum før align-værdien. Så den færdige kode ser sådan ud:
Set re = New RegExp re.Global = True re.Pattern = "\[pic id=(\d+) ([^]]*)?\]" Set matches = re.Execute(memotext)
For Each match In matches id = match.SubMatches(0)
align = Match.SubMatches(1) If "" & align = "" Then align = "right"
sql = "select * from gallery where gID=" & id Set rsPicture = ConnMain.Execute(sql)
If not rsPicture.EOF OR not rsPicture.BOF Then
If align = "center" Then link = "<center><img src='files/users/user_" & rsPicture("gUploadedBy") & "/pictures/" & rsPicture("gThumbnail") & "'></center>" Else link = "<img src='files/users/user_" & rsPicture("gUploadedBy") & "/pictures/" & rsPicture("gThumbnail") & "' align='" & align & "'>" End If
End If
memotext = Replace(memotext, match, link)
Next
Jeg forstår ikke helt logiken i re.Pattern, men hovedsagen er jo at det virker :D Så mange tak for hjælpen og hvis du så lægger et svar så sender jeg straks 100 point til dig :)
Det er rigtigt nok at den lavede den lille fejl. Men i din ny version så virkere den ikke på dem uden [pic id=123] i det du forudsætter at der er et mellemrum efter id-delen. Prøv med dette i stedet:
re.Pattern = "\[pic id=(\d+) ?([^]]*)?\]"
Synes godt om
Slettet bruger
26. august 2006 - 12:03#12
Jep den viste ikke billede hvis der ikke var justeringsværdi, men den nye pattern virker fint.
- så jeg vil nøjes med at forklare hvad der sker i resten:
" ?([^]]*)?"
Et pørgsmålstegn indikere at "det er valgfrit om det skal være der":
" ?" - matcher altså "et mellemrum som er valgfrit".
[^]] - matcher "ethvert tegn som ikke er et ]-tegn". Hvis man ønsker at bruge et ]-tegn inden i et [...]-sæt, så skal den være på første plads.
[^]]* - matcher derfor "0 eller flere tegn som ikke er et ]-tegn". Grunden til at jeg bruger dette delmønster, er at vi ønsker at få fat i resten hen til det afsluttende ]-tegn i "[pic id=123 center]".
([^]]*) - (...) betyder at det der matcher, bliver husket. I dette tilfælde har du jo en (...) tidligere i mønsteret. Den føste huskes som match.SubMatches(0) og den anden som match.SubMatches(1). Havde du haft flere ville disse blive husket som match.SubMatches(2), match.SubMatches(3), osv.
([^]]*)? - Spørgsmålstegnet gør som sagt at dette del-led er valgfrit.
Håber at det forklarede sagen? Ellers må du bare spørge.
... og et svar. :^)
Synes godt om
Slettet bruger
26. august 2006 - 12:18#14
Okay det var da lidt en forklaring, men tror jeg bliver nød til at sætte mig ned en dag og så afprøve hver funktion, for at forstå det helt.
Men siger da mange tak for denne forklaring, den får jeg jo nok brug for en gang i mellem. Og så slipper jeg måske for at skulle spørge så meget :D
Synes godt om
Ny brugerNybegynder
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.