Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ruby-ohjelmointi: HTML-purkaja

Sivun loppuun

ViherEerik [06.02.2017 13:46:54]

#

Suoritan Viopessa Ruby-kurssia ja olen jäänyt jumiin yhteen tehtävään.

Tehtävänanto on siis seuraava:

"Luvun viimeinen tehtävä on hieman poikkeuksellinen, koska tällä kertaa ei luoda itse pääohjelmaa, vaan ainaostaan kirjastomoduuli, joka toteuttaa ohjelman haluaman toiminnon. Itse ohjelmassa poistetaan HTML-muotoilumerkintöjä tekstin seasta ja tulostetaan siistitty teksti ruudulle.

Tehtävää varten on luotu ohjelmakoodi, joka kutsuu metodia nimeltä siisti; argumentiksi metodi saa yhden täyden HTML-kuvauksen yhtenä pitkänä merkkijonona. lähdekooditiedosto on seuraavanlainen:

require "7-5"
tiedosto = File.open("7-5_tiedosto.txt")
rivit = ""

tiedosto.each{|rivi| rivit << rivi}
tiedosto.close

tulos = siisti(rivit)
puts tulos

HTML-kuvaus tarkoittaa verkkosivujen muotoilukuvausta, jossa esimerkiksi tekstipalstat ja otsikoksi tarkoitetut tekstit on merkitty -merkkien väliin tulevilla HTML-kuvauskielen komennoilla.

Ohjelmalla on siis tarkoitus poistaa hakasulkeiden sisällä olevat muotoiluohjeet luettavasta tulosteesta. Käytännössä tämä tarkoittaa sitä, että tehtävänäsi on määritellä uusi moduuli, jossa on metodi siisti, joka läpikäy argumenttina saamansa merkkijonon ja poistaa html-kuvausmerkit ja niiden sisällön korvaamalla ne välilyönneillä."

Oma koodini näyttää tältä.

#coding:utf-8
def siisti(text)

text.gsub!(%r{</?[^>]+?>}, "")

  return text
end

Kääntäjässä oma vastaukseni näyttää oikealta, mutta jostain syystä Viope ei hyväksy sitä. Esimerkkivastauksessa on ilmeisesti erilaiset sisennykset rivien alussa tai rivivaihdot lopussa tjs.

Osaisiko joku kertoa onko ratkaisussani jotain vikaa noin muuten?

Grez [06.02.2017 14:14:14]

#

Tuossa muuten käsketään korvaamaan sisältö välilyönneillä, mutta korvaat ne "ei millään" eli "". Itse kokeilisin ensin vaihtaa "" tilalle " ".

ViherEerik [08.02.2017 14:53:28]

#

Näköjään kopioinnin yhteydessä tästä katosi noi välilyönnit, eli omassa koodissani ne olivat jo. Kokeilin myös eri määrän välilyöntejä ja nyt olen saanut tekstien rivitykset osumaan kohdilleen, mutta Viope ei silti hyväksy vastausta.

Omassa vastauksessani näyttäisi olevan tekstiä ennen 2 tyhjää riviä kun taas esimerkkivastauksessa niitä on vain yksi.

Lisäksi esimerkkivastauksessa on jokaisen kappaleen viimeisen pisteen jälkeen 5 välilyöntiä, kun taas omassa vastauksessani on vain 4.

Voisivatko em. asiat olla syynä siihen ettei Viope hyväksy vastausta? Muuten teksti siis näyttää identtiseltä esimerkkivastauksen kanssa...

Allekirjoittaneella ei ole kyllä mitään hajua, että miten voin lisätä jokaisen kappaleen (ei rivin) jälkeen välilyönnin tai miten voisin poistaa tiedoston ensimmäisen tyhjän rivin moduulin avulla...

Grez [08.02.2017 15:55:17]

#

Onko tuo Viopen kurssi yleisesti tarjolla, eli siis voinko itse käydä tutustumassa ja kokeilemassa?

Jos ei niin eipä tässä ulkopuolisena oikein voi muuta sanoa, kuin että ole yhteydessä ja kysy kurssin järjestäjältä mikä hommassa on vikana. Minusta tuo vastaus näyttää ihan suht kelvolliselta. Sellainen puute tulee mieleen, että oikeasti pitäisi jättää lainausmerkkien sisällä olevat > -merkit huomiotta. (Eli siis <span title="52 > 33"> pitäisi kadota kokonaan kun taas tuo koodisi jättäisi tuon 33"> -lopun.) Jos kuitenkaan tuollaista kompaa ei ole mukana testimateriaaleissa niin ei pitäisi siitäkään jäädä kiinni.

Ja toinen juttu mikä tuossa kokonaisuudessa on rikki, on useammalle riville jakautuvat tagit. Mutta sekin on kyllä enemmän tuon testirungon tekijän moka, kun siisti -funktion tekijä ei sitä oikein järkevästi pysty ratkaisemaan.

ViherEerik kirjoitti:

Näköjään kopioinnin yhteydessä tästä katosi noi välilyönnit

Aika jännä että kopioidessa "" välistä katoaa välilyönti, mutta sen edessä oleva välilyönti säilyy. Onkohan se varmasti ihan välilyönti eikä joku erikoismerkki... Eli jos ihan copy&paste toiminnoilla kopioit, niin kannattaa tarkistaa. Toki jos kopioit naputtelemalla niin sitten ei mitään. :)

The Alchemist [09.02.2017 14:43:40]

#

Rubyn dokumentaation mukaan gsub() ei muokkaa suoraan käytettyä string-oliota vaan palauttaa uuden kopion. Rubya osaamatta näyttäisi siltä, ettet ota paluuarvoa talteen ollenkaan. Ja liekö tuo regex osaa poistaa useammalle riville jaettua html-tagia?

fergusq [09.02.2017 23:30:08]

#

The Alchemist kirjoitti:

Rubyn dokumentaation mukaan gsub() ei muokkaa suoraan käytettyä string-oliota vaan palauttaa uuden kopion. Rubya osaamatta näyttäisi siltä, ettet ota paluuarvoa talteen ollenkaan.

Huomaa huutomerkki nimen perässä (gsub!). Huutomerkilliset nimet muokkaavat oliota, huutomerkittömät eivät.

ViherEerik [10.02.2017 11:43:05]

#

Grez kirjoitti:

(08.02.2017 15:55:17): Onko tuo Viopen kurssi yleisesti tarjolla, eli...

Toi on koulun itseopiskelukurssi, eli ei ole julkisesti tarjolla.

Oon nyt tarkistellu ja kokeillu erilaisia ratkasuja tohon, mutta Viope ei vaan hyväksy ratkaisua.

Pitää varmaan laittaa opettajalle viestiä ja ehkä sitten selviää paremmin että missä vika.

Kiitokset avusta!

dartvaneri [10.02.2017 14:24:07]

#

Ite törmäsin aikoinaan samaan ongelmaan. Tuloste oli täsmälleen sama kuin esimerkin tuloste, mutta ei Viope sitä hyväksynyt. Kun sitä jonkun 4h olin pyöritellyt ja vatvonut, skippasin sen. Eikä se ollut este kurssin läpäisemiseen. :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta