Tämä on hieman noloa, koska minun pitäisi jo tietää tämä, mutta kuinka teen sillaisen, että ohjelma katsoo tiedostosta tekstiä ja jos esimerkiksi se sisältää tälläisen rivin:
<p>moi</p>
niin se näyttäisi tuon välissä olevan tekstin, joka nyt on 'moi'?
Seuraavan lainen functio tuli ensimmäisenä mieleen erottamaan tekstistä tagit...
Public Function PoistaTagit(Teksti As String) As String Dim Alku As Integer, Loppu As Integer Dim osa As String Do Alku = InStr(1, Teksti, "<") Loppu = InStr(1, Teksti, ">") If Alku > 0 And Loppu > 0 Then osa = Mid(Teksti, Alku, (Loppu - Alku + 1)) 'Korvataan tagi välilyönnillä. 'Tämä sen takia, että jos Teksti sisältää 'useita tagien välisiä osia, niin ne palautetaan 'välilyönnillä (tai useammalla) erotettuna. 'Saa sitten muualla erotella osat toisistaan Teksti = Replace(Teksti, osa, " ") End If Loop Until Alku = 0 Or Loppu = 0 PoistaTagit = Trim(Teksti) End Function
Koska VB vitonen ei sisällä suoraan Replace-functiota, niin se pitää tehdä itse.
www.MicroSoft.com kirjoitti:
Public Function Replace(sIn As String, sFind As String, _ sReplace As String, Optional nStart As Long = 1, _ Optional nCount As Long = -1, Optional bCompare As _ VbCompareMethod = vbBinaryCompare) As String Dim nC As Long, nPos As Integer, sOut As String sOut = sIn nPos = InStr(nStart, sOut, sFind, bCompare) If nPos = 0 Then GoTo EndFn Do nC = nC + 1 sOut = Left(sOut, nPos - 1) & sReplace & _ Mid(sOut, nPos + Len(sFind)) If nCount <> -1 And nC >= nCount Then Exit Do nPos = InStr(nStart, sOut, sFind, bCompare) Loop While nPos > 0 EndFn: Replace = sOut End Function
Edit: Typo-hunting season...
Edit Mark II: Katso Visual Basic -oppaista ja sieltä Osa 8 - Tiedostofunktiot miten tekstin saa esiin tiedostosta...
Luet merkkijonoa merkki kerrallaan merkkijonofunktiolla. Jos löytyy "<p>" alat lukea siitä kohdasta, kunnes löytyy "</p> ja tuolla välillä luetut merkit tallennat toiseen merkkijonoon.
Hieman offtopic mutta suomessa ei ole sanaa functio. Voit sanoa joko funkkari tai funktio. Functio kuulostaa harvinaisen aneemiselle.
En ehkä ihan käsittänyt ideaa, mutta en saa toimimaan lopetustagia eli siis </p> vaan se toimii ainoastaan jos on <p>moi<p>.
Onko mitään muuta keinoa kuin tuo BadSourcen kertoma, koska tuon liittäminen minun selaimeeni voi olla vähän vaikeampi prosessi ja sitäpaitsi en saa tuota toimimaan ihan täysin, kuten haluaisin...
Private Sub Form_Load() Static Text As String Text = TagText("<p>Tämä osa merkkijonosta otetaan talteen!</p>") a = MsgBox(Text) End Sub Function TagText(Text As String) As String Static Tag As String Static Tage As String Tag = "<p>": Tage = "</p>" 'aloitus- ja lopetustagien määritelmät For i = 1 To Len(Text) If Mid(Text, i, Len(Tag)) = Tag Then GTi = i + Len(Tag) If Mid(Text, i, Len(Tage)) = Tage Then TagText = Mid(Text, GTi, i - GTi) Exit For End If Next i End Function
Tekaisin tuommoisen koodinpätkän. Pitäisi toimia. Funktion koodista voit itse muokata alku- ja lopputageja. Annat funktiolle parametriksi merkkijonon, niin se palauttaa tagien välissä olevan tekstin.
Hlvt... Väärä aamu tälläiselle...
[OffTopic]Kaviaari: Sori, otan suomen sanakirjani mukaan seuraavalla kerralla ja käynnistän selaimeni oikeinkirjoitustarkistuksen... Kun tarpeeksi monta kertaa kirjoittaa Public Function SeJaSe() As Jotain, niin onko ihme että kirjoitusasu tulee selkärangasta jostain Suomen- ja Englanninkielen välimaastosta, jos ei varta vasten mieti täyttääkö tämä kielipoliisin vaatimukset?
Muuten oman funktion tekeminen sille, että poistetaan tekstistä pelkästään kappaleen aloitus- ja lopetus-tagit jättäen kaikki muut tagit koskematta tuntuu varsin turhalta. Kovakoodaus tälläistä varten on turhan suuri ase hyttysjahtiin.[/OffTopic]
Prkleen funkkari... Voi Luoja!
No tuo minun funktioni ei ainakaan vain poista tageja, vaan etsii määritellyt tagit, ja palauttaa niiden välissä olevan tekstin. Toki sitä voi soveltaa vaikka niin, että tagit voi antaa parametreiksi.
hunajavohveli kirjoitti:
No tuo minun funktioni ei ainakaan vain poista tageja, vaan etsii määritellyt tagit, ja palauttaa niiden välissä olevan tekstin. Toki sitä voi soveltaa vaikka niin, että tagit voi antaa parametreiksi.
Olet oikeassa. Myös omaa funktiotani pitäisi muuttaa sen verran, että funktio saa syötteensä ByVal, että alkuperäinen tekstirivi jäisi alkuperäiseen muotoonsa.
Tämä nyt on huonoa HoTMaiL-koodia, mutta täysin mahdollista, kun kerran HoTMaiL-koodia pystyy kirjoittaamaan miten sattuu.
<p>Oikein lyhyt kappale</p><p>Toinen lyhyt kappale</p>
Millä saat esiin tuon toisen kappaleen, jos funktionsi suoritus lopetetaan, kun saavutetaan ensimmäisen kappaleen lopetus?
Edit: Tuli mieleen entä jos kappale on muotoiltu?
<P ALIGN=LEFT|CENTER|RIGHT|JUSTIFY>Muotoiltu kappale?</P>
BadSource kirjoitti:
Edit: Tuli mieleen entä jos kappale on muotoiltu?
Ei se oman selaimen tekeminen kovin helppoa ole :D
Tuossa pitää varmaan ensin etsiä <p tai <P, sitten etsiä tagin lopetusmerkki ja tallentaa parametrit (joita pitää sitten vielä käsitellä...). Sitten etsitään </p> tai </P>, ja tallennetaan itse merkkijono jne...
Kyllä siinä koodattavaa riittää.
Tein toissapäivänä PHP:llä X(HT)ML:ää värittävän skriptin. Jos jaksatte purkkakoodia kahlata, niin tuo löytyy osoitteesta http://pp.kpnet.fi/blaze/temp/xmlcolor.php?sivu=https://www.ohjelmointiputka.net
Toteutus on kaukana optimaalisesta, mutta ehkä siitä saa ideoita, miten tuon homman voi tehdä.
BadSource kirjoitti:
Millä saat esiin tuon toisen kappaleen, jos funktionsi suoritus lopetetaan, kun saavutetaan ensimmäisen kappaleen lopetus?
No eihän tuo nyt ole homma eikä mikään. Sen kuin vain poistaa Exit For -lopetuksen ja vaihtaa muuttujaan sijoituksen muuttujaan lisäykseksi. Tähän tapaan:
Private Sub Form_Load() Static Text As String Text = TagText("<p>Tämä osa merkkijonosta otetaan talteen!</p> tämä osa ei tule <p> Myös tämä osa tulee</p>") a = MsgBox(Text) End Sub Function TagText(Text As String) As String Static Tag As String Static Tage As String Tag = "<p>": Tage = "</p>" 'aloitus- ja lopetustagien määritelmät For i = 1 To Len(Text) If Mid(Text, i, Len(Tag)) = Tag Then GTi = i + Len(Tag) If Mid(Text, i, Len(Tage)) = Tage Then TagText = TagText + Mid(Text, GTi, i - GTi) End If Next i End Function
Aihe on jo aika vanha, joten et voi enää vastata siihen.