2019年2月12日火曜日

Tcl/Tk ini操作など


iniの扱いで一日かかった~┐('д')┌
サイトで下調べしておいたのでコーディングだけでさくっとイケルと思ってたのに
時間がかかった理由は、私が落としたActiveTclの8.5.18.0にライブラリが入ってなかったこと
結局GitHubからtcllib-1.19ってのを落としてインストしたらイケた( ´∀`)

iniを扱うときは、require inifileってするんだけど、ここでエラーに
サイトでは当然のように書かれてるしActiveTcl付属のヘルプにもこうしろと書かれてるのにエラー
サイトで調べても情報無し
そもそもrequireって何???(・_・?)

結論としてはこれはcの include と同義ですね
標準のtcllibにinifile.tclってのが含まれていて、これを読むと
::ini::**
のいろいろな関数の定義が書かれてました
ActiveTclの8.5.18.0に含まれてるべきだったんじゃないのかな?
もしかしたら最新の8.6には含まれていたのかもしれない
やれやれ┐('д')┌

しかしこうみるとライブラリって先人が作成した便利な関数のことなのかね
考えたらiniってテキストだから、ライブラリがなくたって読めるに決まってる
私はdllなどの実行ファイルのことだと思ってたんだが・・・
そういうのもあるのかな

ちなみに落としてきたtcllib-1.19は7zpになっていて、一旦全て解凍してから中にあるインスト用のtclを実行すれば、GUIのインストーラが起動して、所定の場所に解凍したファイルをコピーしてくれる仕組みになってる
このGUIにはsimulationのチェックボックスがあって、それをチェックして実行したら実際のコピーはしないでコピーしてる風で終わった
多分この段階で何かエラーがあれば教えてくれるんだろう
面白いね

2 件のコメント:

  1. Tcl/TkのパッケージにはTclスクリプトだけでできてるものと、ネイティブdll/soを含むものがあります。どちらもpackage require mylibで読み込めますが、ネイティブの方は直接load mylib.dllでも読めます。

    tcllibやtklibは純粋なTclスクリプトだけで書かれたものを集めたライブラリ群です。

    ネイティブライブラリの代表的なのはffidl、tcludp、rbc、sqlite3、twapi、winicoなどがあります。

    ちなみに個人的にはINIファイルの扱いは簡単じゃないので、Windows APIを使うのが一番簡単で、twapiにそういった関数があります。クロスプラットフォームじゃなくなりますけどね。。。

    返信削除
  2. この日記はiniで悩んでたみたいだけどほとんど覚えてないです┐('д')┌
    tclのライブラリも奥深いんですね
    実は私はiniは効率が悪いように感じていて好きではなく、普段は使いません
    このときはiniを使えないこと自体が悔しくてムキになっていろいろ調べたような・・( ´∀`)
    まあ効率を考えるのならはじめからスクリプトはやめてcで書くべきなんでしょうが

    返信削除