Olen yrittänyt haeskella netistä esimerkkiä mikä näyttäisi miten laskea kuinka monta kertaa tietty sana esiintyy merkkijonossa, mutta tuloksetta. Ilmeisesti mitään valmistakaan funktiota ei ole tähän tarkoitukseen tehty.
Eli haeskelen siis vb.net vastinetta php:n funktiolle substr_count.
InStr-funktiolla ja pienellä silmukalla onnistuu.
Heittäisitkö pienen esimerkin? Itse en ainakaan keksi miten InStr-funktiota voisi käyttää silmukan yhteydessä.
Kiitoksia linkistä, netistä kyllä hain mutta en sitten älynnyt täältä hakea :)
Moikka Tumettaja!
tällä löytyy joko koko sana tekstistä tai merkkijono merkkijonosta...
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System. EventArgs) Handles Button1.Click
MessageBox.Show(GetInStrCount( _
Me.TextBox1.Text, Me.TextBox2.Text).ToString)
End Sub
Private Function GetInStrCount( _
ByVal txt1 As String, ByVal txt2 As String) As Integer
Dim cnt As Integer = 0
If txt1.Length < txt2.Length And txt1 <> "" Then
For i As Integer = 0 To TextBox2.Text.Length - TextBox1.Text.Length
If i < TextBox2.Text.Length - TextBox1.Text.Length _
And Not CheckBox1.Checked Then
If TextBox2.Text.Substring(i, TextBox1.Text.Length + 1) _
.IndexOf(TextBox1.Text + " ") > -1 Then
cnt += 1
End If
Else
If TextBox2.Text.Substring(i, _
TextBox1.Text.Length).IndexOf(TextBox1.Text) > -1 Then
cnt += 1
End If
End If
Next
End If
Return cnt
End FunctionTumettaja kirjoitti:
netistä kyllä hain
Sillä Geneerisellä hakukoneellahan minäkin, sattui vain tulemaan tuo putkan entinen keskustelu tuloksissa. Hakusanoina niinkin kaukaa haetut kuin vb + substr_count.
neau33 kirjoitti:
joko koko sana tekstistä tai merkkijono merkkijonosta...
Miten koko sana tekstistä eroaa merkkijono merkkijonosta? Merkkijonojahan ne sana ja tekstikin ovat. Funkkari ei taida ottaa huomioon sanoja, joiden perässä tulee jokin muu välimerkki kuin välilyönti. Funkkarissa olisi varmaankin tarkoitus käyttää annettuja parametreja txt1 ja txt2 noiden TextBox1.Text sekä TextBox2.Text tilalla ja järkevää lisätä tuo CheckBox1.Checked parametrina annettavaksi arvoksi. Funktion parametrien nimet ovat mitäänsanomattomia, how'bout esim. needle ja subject/haystack?
Moikka taas!
joo, sori toi edellinen...olin sitä editoimassa ja tuli hätäpäissä lähetettyä kun tuli yllättäen vieraita...
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System. EventArgs) Handles Button1.Click
'TextBox1-tekstiruudussa on vain yksi hakusana
' CheckBox1-valintaruutu ei ole valittuna:
' funktio etsii TextBox2-tekstiruudun tekstistä
' kaikki kokonaiset, hakusanaa vastaavat sanat...
' esim. hakusana: moi
' TexBox2-tekstiruudun teksti: moi moikka tuommoinen
' funktion palaute: "moi" löytyi 1 kpl"
' CheckBox1-valintaruutu on valittuna:
' funktio etsii TextBox2-tekstiruudun merkkijonosta
' kaikki hakusanaa vastaavat merkkijonot...
' esim. hakusana: moi
' TexBox2-tekstiruudun teksti: moi moikka tuommoinen
' funktion palaute: "moi" löytyi 3 kpl"
'TextBox1-tekstiruudussa on monta välilyönnein erotettua hakusanaa
' CheckBox1-valintaruutu ei ole valittuna:
' funktio etsii TextBox2-tekstiruudun tekstistä
' kaikki kokonaiset, hakusanoja vastaavat sanat...
' esim. hakusanat: moi moikka
' TexBox2-tekstiruudun teksti: moi moikka moikkaa tuommoinen
' funktion palaute: "moi" löytyi 1 kpl
' "moikka" löytyi 1 kpl
' CheckBox1-valintaruutu on valittuna:
' funktio etsii TextBox2-tekstiruudun merkkijonosta
' kaikki hakusanoja vastaavat merkkijonot...
' esim. hakusanta: moi moikka
' TexBox2-tekstiruudun teksti: moi moikka moikkaa tuommoinen
' funktion palaute: "moi" löytyi 4 kpl"
' : "moikka" löytyi 2 kpl
'TextBox1-tekstiruudussa on lainausmerkkien sisällä lause
'
' CheckBox1-valintaruutu ei ole valittuna:
' funktio etsii TextBox2-tekstiruudun tekstistä
' kaikki kokonaiset, hakulausetta vastaavat lauseet - lauseen osat
' esim. hakulause: "terve moro hei"
' TexBox2-tekstiruudun teksti: hän sanoi terve moro hei
' : ja terve moro heippa...
' funktion palaute: "terve moro hei" löytyi 1 kpl
' CheckBox1-valintaruutu on valittuna:
' funktio etsii TextBox2-tekstiruudun merkkijonosta
' kaikki hakulausetta vastaavat merkkijonot
' esim. hakulause: "terve moro hei"
' TexBox2-tekstiruudun teksti: hän sanoi terve moro hei
' : ja terve moro heippa...
' funktion palaute: "terve moro hei" löytyi 2 kpl
Dim InfoStr As String = _
GetInStrCount(Me.TextBox1.Text, _
Me.TextBox2.Text, Me.CheckBox1.Checked)
If InfoStr <> "" Then
MessageBox.Show(InfoStr,"InStrCount", _
MessageBoxButtons.Ok, MessageBoxIcon.Information)
End If
InfoStr = Nothing
End Sub
Function GetInStrCount(ByVal Str1 As String, _
ByVal Str2 As String, ByVal Checked As Boolean) As String
Str2 = Str2.Replace(Environment.NewLine," ")
Str1 = Str1.Trim: Str2 = Str2.Trim
If str1 = String.Empty Or Str2 = String.Empty Then
Return String.Empty: Exit Function
End If
Dim ArrayExists As Boolean = False
Dim IsSentence As Boolean = False
Dim StrArray() As String
Dim ReturnStr As String = String.Empty
If Not Checked Then
Str2 = " " + Str2 + " "
End If
If Str1.IndexOf(Chr(34)) > -1 Then
If Str1.Substring(0, 1) = Chr(34) And _
Str1.Substring(Str1.Length - 1, 1) = Chr(34) Then
IsSentence = True
Str1 = Str1.Substring(1, Str1.Length - 2)
End If
End If
If Str1.IndexOf(" ") > -1 And Not IsSentence Then
ArrayExists = True
Else
If Not Checked Then
Str1 = " " + Str1 + " "
End If
If Str1.Length > Str2.Length Then
ArrayExists = Nothing: IsSentence = Nothing
StrArray = Nothing: Return ReturnStr
ReturnStr = Nothing: Exit Function
End If
End If
IsSentence = Nothing
If Not ArrayExists Then
Dim cnt As Integer = 0
For i As Integer = 0 To Str2.Length - Str1.Length
If Str2.Substring(i, Str1.Length).IndexOf(Str1) > -1 Then
cnt += 1
End If
Next
ReturnStr = "'" + Str1.Trim + "' löytyi " + CStr(cnt) + " kpl"
cnt = Nothing: Return ReturnStr: ReturnStr= Nothing
StrArray = Nothing: ArrayExists = Nothing: Exit Function
Else
StrArray = Str1.Split(" ")
If Not Checked Then
For i As Integer = 0 To StrArray.GetupperBound(0)
StrArray(i) = " " + StrArray(i) + " "
Next
End If
Dim InfoArray(1, 0) As Object
InfoArray(0, 0) = ""
InfoArray(1, 0) = 0
For i As Integer = 0 To StrArray.GetUpperbound(0)
If Not StrArray(i).Length > Str2.Length Then
For j As Integer = 0 To Str2.Length - StrArray(i).Length
Dim IsAllreadyInArray As Boolean = False
If Str2.Substring(j, StrArray(i). _
Length).IndexOf(StrArray(i)) > -1 Then
For k As Integer = 0 To InfoArray.GetUpperbound(1)
If InfoArray(0, k) = StrArray(i) Then
IsAllreadyInArray = True
InfoArray(1, k) += 1: Exit For
End If
Next k
If Not IsAllreadyInArray Then
InfoArray(1, k) += 1
InfoArray(0, InfoArray. _
GetUpperBound(1)) = StrArray(i)
InfoArray(1, InfoArray. _
GetUpperBound(1)) += 1
If InfoArray.GetUpperBound(1) < _
StrArray.GetUpperBound(0) Then
ReDim Preserve InfoArray(1, _
InfoArray.GetUpperBound(1) + 1)
End If
End If
End If: IsAllreadyInArray = Nothing
Next j
End If
Next i
If InfoArray(0, 0) = String.Empty Then
ReturnStr = String.Empty
Else
For i As Integer = 0 To InfoArray.GetUpperBound(1)
If Not InfoArray(0, i) Is Nothing Then
ReturnStr += "''" + InfoArray(0, i).Trim + _
"'' löytyi " + InfoArray(1, i).ToString + " kpl" + _
Environment.NewLine + Environment.NewLine
End If
Next
End If
InfoArray = Nothing
End If
Return ReturnStr: ReturnStr = Nothing
StrArray = Nothing: ArrayExists = Nothing
End FunctionAihe on jo aika vanha, joten et voi enää vastata siihen.