hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
COMDictionary - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

hsp3.png

Dictionary

手軽に扱える簡易データベース代わりにもなるデータ構造がCOM(Scripting ランタイム?)にあります。それが辞書(Dictionary)です。

スクリプト

キーを適当(「あ」でも「%」でもなんでも)に入力してください。キーが登録されていれば対応する単語を表示します。

filev3com_dictionary[sp].hsp
Everything is expanded.Everything is shortened.
  1
  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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
!
-
|
!
 
 
 
    newcom dc , "Scripting.Dictionary"
 
    comres vret
    dc("compareMode") = 0   ; 完全一致検索
 
    dc -> "Add" "H" , "ホット"
    dc -> "Add" "S" , "スープ"
    dc -> "Add" "P" , "プロセッサー"
 
    title "単語数 = "+dc("count")
    key = ""
    objmode 1 : input key,ginfo(12),20,64-1
    onkey gosub *enter
    stop
 
*enter
    if iparam ! 13 : goto *@f
 
    dc -> "Exists"  key
    if vret!0{
        dialog "< "+key+" >は< "+dc("Item",key)+" >のキーです",0,"登録済み"
    }
    else{
        dialog "< "+key+" >は辞書のキーに登録されていません",0,"未登録"
    }
    objprm 0,"" : objsel 0
*@
    return

とりあえず「初めてのCOM」(Scripting ランタイム?^^;違いが良く分かっていない)ということで、オブジェクトとメソッド、プロパティの書き方だけレポート。
ここでオブジェクト指向について触りすらも分からない人の為に簡単な用語解説。

オブジェクト
あるモノについて操作や状態を1つにまとめたもの。モノです。
メソッド
オブジェクトに対して動作を起こさせるもの。命令です。
プロパティ
オブジェクトの状態を表すもの。状態です。

最初は目的のオブジェクトを作ることから始める。これがnewcom。

newcom dc , "Scripting.Dictionary"

でScriptランタイムのDictionaryオブジェクトを作ったと思ってください。
オブジェクトは何個でも(システムに制限がなければ)作れます。
そして指定したオブジェクト型変数が1つのオブジェクトを表します。

次にメソッドの書き方。HSP命令に引数があるようにメソッドにも引数があったりします。
メソッドの書き方のまとめ:

mcall dc , "Add" , "H" , "ホット"  ; ○
dc -> "Add" "H" , "ホット"         ; ○
dc -> "Add" , "H" , "ホット"       ; ×エラーです。

メソッドは自分自身を含んでいるオブジェクトに対して動作を起こします。
メソッドだけではどのオブジェクトに対する操作なのか分からないのでオブジェクト名(オブジェクト型変数)も一緒に書く。
またメソッドの戻り値を利用する場合は事前にcomres命令で戻り値の格納される変数を指定してやります。

次はプロパティの書き方。

title "単語数 = "+dc("count")

こんな風にメソッド同様、プロパティ名だけではどのオブジェクトのプロパティなのか分からないのでオブジェクト名(オブジェクト型変数)も一緒に書く。
HSPの関数同様、プロパティは値を返すので左辺に代入するか式中で使わないとエラーです。
また、こちらからオブジェクトに対してプロパティを設定することも可能。(読み取り専用プロパティには無理)

dc("compareMode") = 0   ; 完全一致検索

プロパティを左辺にして代入文で値の設定が可能。

プロパティの中には引数(添え字?)のつくものもあったりします。そんな時は、

dialog "< "+key+" >は< "+dc("Item",key)+" >のキーです",0,"登録済み"
                         dc("Item",key)

プロパティの次に目的の引数(添え字)をプロパティ名の隣にカンマで区切って指定する。
上のは引数(添え字)に変数を指定してます。

以上。Dictionary自体について説明してないのは、MSDNで調べたほうがいいからです^^; -- kz3 2005-09-28 11:35:59 (水)

メソッド・プロパティ

今回使ったメソッド・プロパティのリストです。

Dictionaryオブジェクト
名前種類属性書式説明戻り値
AddMmcall object , "method" , "Key" , "Value"オブジェクトにKeyとValueを新規登録する
object -> "method" "Key" , "Value"
ExistsMmcall object , "method" , "Key"オブジェクトにKeyが登録されているか調べる
object -> "method" "Key"
CountPRobject ( "property" )辞書に登録されているKeyとValueの組を取得する登録数
CompareMode?PR/Wobject ( "property" )完全一致検索は0、大文字小文字を区別しない場合は1をセットする
ItemPR/Wobject ( "property" , "Key" )Keyに対応するValueを取得する
また既に登録されているKeyに新しいValueを関連付けることもできる
Value

利用案

辞書はキーと値からなる単純なデータ構造です。こんなものに簡単に利用できます。

  • Dicronaryを使った計算機
  • ファイルを読み込んで出現単語をキーに、出現回数を値にしたデータベース。
  • ネットワークホスト名をキーに、IPアドレスを値にしたデータベース。
  • 暗号化元の入力バイト文字列をキーに、暗号先の出力バイト文字列を値にしたデータベース。 復号化は同じ辞書を再利用可能。
    でも辞書自体も暗号化しないと暗号の対応表がもろバレです^^;
  • 科目をキーに、点数を値にしたデータベース。
  • 国際標準図書番号ISBNをキーに、書籍名を値にした書籍データベース。

などなど。

コメント

  • COM初挑戦。今分かっているのはメソッド呼び出しに引数が2つ以上つくものは、省略記法「->」が使えないということです。
    とりあえず現状辞書には登録できました。
    あとは取得だけですが・・・。 -- kz3 2005-09-27 15:49:00 (火)
  • HSP3サンプルビューワー最高です!
    VBScriptで登録したアイテムを取得するのにItemプロパティにキーを指定するわけですが、
      1
      2
    
        ' VBScript
        d.Add "H", "ホット"
        ItemDemo = d.Item("H")
    このプロパティに引数(添え字?)がつく書き方でつまづいていたのですが、解決の糸口はやはりHSP3BBSにありました。
    HSP3BBSワード検索「COM WSH」-> サンプルビューワー「comtest5.hsp」->「comtest8.hsp」正規表現
    にこれと思われる記述があったので試したところ見事にビンゴです。 -- kz3 2005-09-28 10:05:24 (水)
  • そして2個以上引数のあるものには省略記法が使えないといいましたが、使えました。かなりミスしやすいので例を挙げます。 -- kz3 2005-09-28 10:19:41 (水)
    mcall dc , "Add" , "H" , "ホット"  ; ○
    dc -> "Add" "H" , "ホット"         ; ○
    dc -> "Add" , "H" , "ホット"       ; ×
  • mcallを使った場合は各パラメータをカンマで区切る必要がありますが、省略記法を使った場合は、メソッド名と最初の引数との間にはカンマをつけてはいけません。 -- kz3 2005-09-28 10:49:09 (水)
  • #codeはダブククォーテーションを文字列の開始・終端として認識してしまうようなので、行番号がおかしく色分けもおかしくなってます^^; -- kz3 2005-09-28 10:50:21 (水)
  • ダブルクォーテーション囲みからアングルブラケット囲みにしました。 -- kz3 2005-09-28 10:56:13 (水)
  • 説明しないつもりでしたが最低使っているものだけの説明はアリかなと。まだ書き途中です。 -- kz3 2005-10-07 09:31:43 (金)

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filev3com_dictionary[sp].hsp
592件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:26:53 (2436d)