Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: nettiselaimesta taas

juhaz [24.02.2005 19:12:27]

#

Minulle iski aika aloittelijamainen oikosulku, kun olen koodaamassa tuota nettiselainta visual basic 6:lla.

Minulla on siinä jo jonkinlainen linkki-systeemi, joka ymmärtää, että tietty teksti on linkki jos sivulla on koodissa tälläinen kohta:
<a href=sivun osoite</a>

niin kuinka tai mitä minun pitää selaimen koodiin laittaa, että siitä saisi normaalin näköisen eli <a href="sivun osoite"></a> ?

Viimeisimmät sourcet selaimestani löytyy osoitteesta:
http://juhak.no-ip.info/ohjelmat/selain.zip

Jos jotakuta kiinnostaa edes...

sqwiik [24.02.2005 22:16:27]

#

Törmäsin samankaltaiseen ongelmaan rakentaessani QB:llä ohjelmointikieltä pari päivää sitten. Sen sijaan, että lukisit rivi kerrallaan, lue tagi kerrallaan (eli teksti merkkien '<' ja '>' välillä). Tällöin teksti kannattaa lukea binäärimuodossa merkki kerrallaan. Tässä jonkinlaista alkua (suoraan pohjattomasta hatusta):

dim tagi as string, merkki as string * 1
dim pituus as integer
open filu for binary as #1
do
  if eof(1) then exit do
  get #1, merkki 'luetaan 1 merkki
  if merkki = "<" then 'tagi alkaa
    ' Etsitään loppu ja käsitellään sisältöä
    get #1, merkki: pituus = 0: tagi = ""
    do
      get #1, merkki
      ' saavutettiin loppu tai eof
      if merkki = ">" or eof(1) then
        exit do
      else
        ' Ei kuitenkaan lasketa mukaan rivinvaihtoja tai tabulaattoreita
        if merkki <> chr$(13) and merkki <> chr$(9) then
          pituus = pituus + 1
          tagi = tagi + merkki
        end if
      end if
    loop
    tagi = lcase(tagi) ' Parannellaan vertailua varten
    ' Nyt on tagi on tagin sisältö ilman <- ja >-merkkejä.
    ' Merkkijonosta voidaan etsiä tiettyjä merkkijonoja
    ' InStr-komennolla.
    ' Esim. linkissä <a ...> ensimmäinen tieto täytyy olla
    ' merkki 'a' (tunniste), tauluissa 'table' jne.

  end if
loop
close #1

Seuraava askel tällä mekanismilla olisi sitten mm. attribuuttien etsinnällä tagista (bgcolor, name, class jne). Tähän kannattaa tehdä erillinen funktio, jolloin voit samalla laittaa selaimeesi oletusarvot tietyille asioille (bgcolor, textcolor jne). Esim.

Function EtsiAttr(tag as string, attr as string)
dim pos as integer, pos2 as integer
  pos = InStr(tag, attr) ' Etsitään, missä kohdin on (jos on)
  if pos = 0 then ' Oletukset menevät tähän (attribuuttia ei ole määritelty)
    EtsiAttr = ""
  else ' Attribuutti on olemassa (ainakin jollain tasolla).
       ' Se alkaa '='-merkin jälkeen ja on lainausmerkeissä.
    ' Eli haetaan seuraavan '=' -merkin paikan ja luetaan
    ' sitä seuraava ""-merkeissä oleva sana:
    pos = InStr(pos, tag, "=")
    ' Virheenkäsittelyä
    if pos = 0 then
      MsgBox "Virhe attribuutin " +attr+ " lukemisessa!"
      EtsiAttr = "": Exit Function
    end if
    ' Hetaan sitten =:tä seuraava "-merkki (ASC: 34)
    pos = InStr(pos, tag, chr$(34))
    ' Taas virheenkäsittelyä...
    if pos = 0 then
      MsgBox "Virhe attribuutin " +attr+ " lukemisessa!"
      EtsiAttr = "": Exit Function
    end if
    ' Luetaan toiseen "-merkkiin asti. pos+1, koska muuten
    ' palauttaisi aina pos:n arvon.
    pos2 = InStr(pos + 1, tag, chr$(34))
    ' Virhe....
    if pos2 = 0 then
      MsgBox "Virhe attribuutin " +attr+ " lukemisessa:"+chr$(13)+"Päättämätön attribuutti."
      EtsiAttr = "": Exit Function
    end if
    ' No niin, se meni hyvin :) Luetaan tiedon sijainti.
    EtsiAttr = Mid(tag, pos, pos2)
  end if
end function

'... ... ...
' esim: tämän pitäisi tulostaa (tässä tapauksessa) info.html.

print EtsiAttr("<a href = "+chr$(34)+"info.html"+chr$(34)+">", "href")

Toivottavasti auttoi :/

Latska [24.02.2005 22:28:47]

#

Minkälaista kieltä sqwiik väsää? (sori offtopic)

sqwiik [24.02.2005 22:36:30]

#

Vastaus offtopic: melko hämärää :) esim. kaikki silmukat ovat olioita (ja siten muokattavissa ulkopuolelta...)

mikeful [25.02.2005 10:30:15]

#

Suosittelisin etsimään artikkeleita, joissa käsitellään parserin tekemistä vaikka tekstiseikkailuun tai skriptikieltä varten.

Offtopic: Aika mielenkiintoinen kieli... :) Voisi itsekin yrittää tehdä mahdollisimman kummallisen kielen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta