作者: Hiroshi Shinohara
日時: 2003/8/20(00:10)
Iconミニ講座1(辞書読込)
 今回は、辞書の読み込みです。 辞書と言っても、単語がずらっと並んでいる
テキストファイルですので、テキストファイルの読込プログラムと変わりはあり
ません。 後々、時間が問題に気になりそうなので、現在時刻を書き出すように
しました。 &clockは、現在時刻を hh:mm:ss形式で保持している組込キーワード
です。  最初、動作モニター用の表示は、エラー出力へ出していましたが、
アップの都合上、標準出力へ出すように修正してあります。

-----^ DICREF.ICN ( date:03-08-19 time:23:32 ) -------------<cut here
####################
# 辞書読込・辞書参照の習作。
####################
# dicref.icn Rev.1.0 2003/08/19 windy 風つかい H.S.
####################
# Usage dicref 文字列
#    english.dicは、スペルチェック用の英単語が順に並んだもの。
#    このプログラムのテストでは、DD SOFT SoundMixSpellコンポーネント
#    Ver 0.3.0 に 同梱の辞書ファイルを使用。
# This file is in the public domain.

procedure main()
  # 辞書読込
  dic := "english.dic"                          # 辞書ファイル名
  dir := open(dic) | stop(dic," が見つかりません")   # 辞書ファイルオープン
  S_dic := set()                                # 辞書格納 set生成
#  write(&errout,dic," を読込中です。")          # 辞書読み込み
  write(dic," を読込中です。")                  # 辞書読み込み
#  write(&errout,"開始:",&clock)
  write("開始:",&clock)
  n := 0                                        # 辞書行数カウンタ

  while word := read(dir) do {                  # 辞書を1行ずつ読み込んで、
    insert(S_dic,word)                          # setに登録
    n +:= 1
    if n % 1000 = 0 then writes(&errout,"*")    # 読み込み状況表示
  }

  close(dir)                                    # 辞書ファイルクローズ
   write(&errout)
#  write(&errout,"終了:",&clock)
  write("終了:",&clock)
#  write(&errout,dic," の読込を終わりました。\n",*S_dic," 語ありました。")
  write(dic," の読込を終わりました。\n",*S_dic," 語ありました。")

  # 辞書参照テスト
  L := ["heavy","rain","yveah","niar"]          # テストデータ
#  write(&errout,"参照テストを開始します。")
  write("参照テストを開始します。")
#  write(&errout,"開始:",&clock)
  write("開始:",&clock)
  every s := !L do {                            # テストデータを順次読み出し
    writes(s)
    if member(S_dic,s) then write(": OK")       # 辞書にあるかチェック
                       else write(": NG")
  }

#  write(&errout,"終了:",&clock)
  write("終了:",&clock)
#  write(&errout,"参照テストを終わりました。")
  write("参照テストを終わりました。")

end
-----$ DICREF.ICN ( lines:53 words:154 ) -------------------<cut here

dicref >aaa としますと、こんな結果になります。
-----^ AAA ( date:03-08-19 time:23:35 ) --------------------<cut here
english.dic を読込中です。
開始:23:35:43
終了:23:35:51
english.dic の読込を終わりました。
257650 語ありました。
参照テストを開始します。
開始:23:35:51
heavy: OK
rain: OK
yveah: NG
niar: NG
終了:23:35:51
参照テストを終わりました。
-----$ AAA ( lines:13 words:20 ) ---------------------------<cut here

 私のPCでは、辞書読込・setへの格納に、8秒ほどかかっています。
 CPU Celeronで、クロック 733M、メモリーは多分32M、MS-DOS版
の Iconを、Windows-MEのDOS窓で動作させています。

風つかい(hshinoh@...)
IconのWWWは、  http://www.cs.arizona.edu/icon/
UniconのWWWは、http://unicon.sourceforge.net/index.html
BGM: Battery's not included /森山威男&杉本喜代志