VB.Netです。
連想配列を使って(StringDictionary)
収められている値Valueをキーワードで検索して
存在すれば、そのハッシュKeyを取り出すって事がしたいのですが
Dim de As System.Collections.DictionaryEntry
CType(de.Value, String).IndexOf("キーワード", 0)
でも
System.Text.RegularExpressions.Regex.IsMatch(CType(de.Value, String), "キーワード")
の正規表現でも
日本語文字とアルファベット(a,iなど)が一致します。
これは仕様なのでしょうか?
よろしくお願いします。
完全一致なら、単純に
Dim ht As Hashtable = New Hashtable
ht("japan") = "日本"
ht("america") = "アメリカ"
ht("america2") = "アメリカfg"
ht("america3") = "アメリカss"
ht("america4") = "アメリカgg"
For Each de As DictionaryEntry In ht
'If CType(de.Value, String).IndexOf("アメリカ", 0) = 0 Then
If de.Value = "アメリカ" Then
MsgBox(de.Key)
End If
Next
で、よろしいかと思います。
ありがとうございます。
完全一致ではなく、Value値の文字列の中に
一致するキーワードがあるかどうか調べたいのです。
作りたいのは日記で、データーベースの代わりにCSVでテキストに書き出し
それをハッシュ(StringDictionary)に読み込んで利用しています。
「キー」に日時、「値」に本文
本文のキーワード検索が目的です。
よろしくお願いします。
上記コードの
If de.Value = "アメリカ" Then を
If CType(de.Value, String).IndexOf("アメリカ", 0) = 0 Then
に変更してみてください。
そのまま、ひっかかると思います。
でも、このやり方ではないのですよね。
ありがとうございます。
If CType(de.Value, String).IndexOf("keyWord", 0) >= 1 Then
で上手く動作しました。
ヘルプを見直して
value が Empty の場合、戻り値は startIndex...
本文が空の場合(上の場合)「0」が返ってくるのですね。
解決したました。
ツイート | ![]() |