GetWord2 & CountWords2
Author: KilledWhale
Added: 9. huhtikuuta 2011 kello 21.34
Edited: 15. huhtikuuta 2011 kello 22.19
Category: Merkkijonot
Description
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | txt$ = "ääk - b-c - ö"
Print CountWords(txt, " - ") + "::" + CountWords2(txt, " - ")
Print ""
For i = 1 To 3
Print GetWord(txt, i, " - ") + "::" + GetWord2(txt, i, " - ")
Next i
WaitKey
Function GetWord2(a As String, b As Integer, c As String)
l = Len(c) // Otetaan pituus muuttujaan optimoinniksi
For i As Integer = 2 To b // Käydään läpi kaikki ei-halutut sanat
q = InStr(a, c) // Katsotaan löytyykö erotinta
If q Then // Löytyi
a = Mid(a, q + l) // Otetaan alkuosa pois erottimeen asti
EndIf
Next i
q = InStr(a, c) // Katsotaan vielä löytyykö erotinta
If q Then // Jos löytyi
Return Mid(a, 1, q - 1) // Palautetaan tekstiä seuraavaan erottimeen asti
Else // Ei löytynyt
Return Mid(a, 1) // Palautetaan loppuosa
EndIf
EndFunction
Function CountWords2(a As String, c As String)
Repeat
n + 1 // Kasvatetaan arvoa, että montako ON löydetty
aa = InStr(a, c, aa + 1) // Katsotaan löytyykö erotinta
If Not aa Then // Jos ei löydy
Exit // Poistutaan
EndIf
Forever
Return n // Palautetaan esiintymien määrä
EndFunction
|
Comments
#1038 Sent by: Jare, 2. maaliskuuta 2020 kello 7.56
Oppia ikä kaikki, GetWord() ilmeisesti trimmaa merkkijonosta välilyönnit/tabit pois alusta (ehkä lopustakin?). Eli jos käytät sanojen erottimena jotain muuta kuin välilyöntiä ja haluaisit säilyttää merkkijonossa mahdollisesti olevan sisennyksen, GetWord():lla se ei onnistu :D. Mutta alla oleva esimerkki näyttää, että KW:n GetWord2() selviää tästäkin puhtain paperein:
tabtesti1$ = Chr(9) + "sisennetty teksti" ' Chr(9) on tab-merkki
tabtesti2$ = Chr(9) + "sisennetty-teksti"
välilyöntitesti$ = " sisennetty-teksti"
Print "Tulokset (teksti jossa ei ole alussa välilyötejä"
Print "/tabia, on väärin):"
Print "Tab-testi 1: '" + GetWord(tabtesti1,1," ")+"' '"+GetWord2(tabtesti1,1," ")+"'"
Print "Tab-testi 2: '" + GetWord(tabtesti2,1,"-")+"' '"+GetWord2(tabtesti2,1,"-")+"'"
Print "Välilyötitesti: '" + GetWord(välilyöntitesti,1,"-")+"' '"+GetWord2(välilyöntitesti,1,"-")+"'"
WaitKey
#1039 Sent by: Jare, 2. maaliskuuta 2020 kello 8.05
Kannattaa muuten lisätä $-merkki GetWord2() -funktion nimeen, jotta CoolBasicin kääntäjä ei turhaan herjaile tietotyyppien yhteensopimattomuudesta joissain tilanteissa. Esimerkiksi Trim(GetWord2()) aiheuttaa herjan "You must pass a different type of parameter to this function or command or array."
Mutta jos lisäät $-merkin funktiomäärityksen nimeen, niin kääntäjä ei herjaa, koska silloin se tajuaa että GetWord2() palauttaa merkkijonon:
Function GetWord2$(a As String, b As Integer, c As String)
// ...
EndFunction
Nämä ovat näitä CB:n "kummallisuuksia". Sillähän ei ole mitään väliä, minkä tyyppisen arvon funktio oikeasti palauttaa, koska CB kuitenkin konvertoi sen automaattisesti toisentyyppiseksi silloin kun tarvitaan.
#2 Sent by: Jare, 9. huhtikuuta 2011 kello 22.57
Näitä funktioita olen aina silloin tällöin etsiskellyt! Hienoa että ne ovat nyt täällä. :)