Avatar billede Slettet bruger
25. august 2006 - 22:40 Der 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)

  If not rsPicture.EOF OR not rsPicture.BOF Then

  link = "<img src='files/users/user_" & rsPicture("gUploadedBy") & "/pictures/" & rsPicture("gThumbnail") & "' align='right'>"

  End If

  memotext = Replace(memotext, match, link)
a=a+1
Next
Avatar billede kiddoe Nybegynder
25. august 2006 - 23:14 #1
hvor henter du værdierne right left og center
Avatar billede kiddoe Nybegynder
25. august 2006 - 23:37 #2
place = "hent værdien"
link = "<p align='"&place&"'><img src='files/users/user_" & rsPicture("gUploadedBy") & "/pictures/" & rsPicture("gThumbnail") & "'></p>"
Avatar billede kiddoe Nybegynder
25. august 2006 - 23:41 #3
if place = "" then
place = "right"
end if
Avatar billede nielle Nybegynder
26. august 2006 - 09:25 #4
Prøv med dette:

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
Avatar billede 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...
Avatar billede nielle Nybegynder
26. august 2006 - 09:38 #6
Øh? Jeg har jo lavet om i dit pattern, og tjekker på Match.SubMatches(1), af samme årsag.
Avatar billede Slettet bruger
26. august 2006 - 11:17 #7
Okay, beskeden fra 09:25:11 var der ikke da jeg begyndte at skrive mit svar.
Men jeg skynder mig lige at tjekke den kode :)
Avatar billede nielle Nybegynder
26. august 2006 - 11:20 #8
Ahhh :^)
Avatar billede nielle Nybegynder
26. august 2006 - 11:21 #9
Pattern'et skal da vist i øvrigt se sådan her ud:

re.Pattern = "\[pic id=(\d+)( [^]]*)?\]"
Avatar billede Slettet bruger
26. august 2006 - 11:47 #10
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 :)
Avatar billede nielle Nybegynder
26. august 2006 - 11:58 #11
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+) ?([^]]*)?\]"
Avatar billede 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.
Avatar billede nielle Nybegynder
26. august 2006 - 12:09 #13
Forklaring af mønsteret:

\[pic id=(\d+) ?([^]]*)?\]

Well, du har jo tjek på den første del:

\[pic id=(\d+)...\]

- 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. :^)
Avatar billede 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
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