INIファイル

TcllibにINIファイルを操作をためのinifileパッケージがあります。
100% Pure Tclで記述されているのでWindows以外のプラットフォームでも使えます。
INIファイルはWindows 3.x時代にアプリケーションやOSの設定状態を保存するのに
使われていたテキストファイルです。現在はレジストリに取って代わっていますが、
まだ一部のアプリケーションで使われています。それぞれに一長一短があります。

レジストリとの比較

比較項目INIファイルレジストリ
バイナリデータの扱い×*1
マルチユーザ対応×*2
ファイルサイズ制限×(あり32K?)*3○なし
データ移動のしやすさ×
編集のしやすさ×
バックアップのしやすさ×
操作失敗時のOSへの影響○なし×あり
*1 Tclはすべてを文字列として扱うので関係ありません。
*2 工夫次第で可能です。
*3 inifileパッケージでは、制限がありません。

INIファイルの形式

セクション
セクション開始行は [section] という行です。
セクションの範囲は次のセクションが現れるかファイルの終わりまでです。
キー(key)と値(value)
key=valueという行です。
キーに対する値を定義します。
キーと値のセパレータにイコール(=)が使われます。

INIファイルの例
[AppName]
Font={MS Sans Serif} 8
Geometry=486x318+132+150

サンプル

使い方はとっても簡単です。

package require inifile

pack [text .text]

# 書き込みモードでオープン
set ini [::ini::open sample.ini w]

# セクションにキーと値を設定する
::ini::set $ini AppName Geometry [wm geometry .]
::ini::set $ini AppName Font [.text cget -font]

# Diskへの書き込み(必須)
::ini::commit $ini 

# クローズ
::ini::close $ini

package require inifile

# 読み込みモードでオープン
set ini [::ini::open sample.ini r]

# セクションのキーから値を取る
if {::ini::exists $ini AppName Geometry} {
    set geometry [::ini::value $ini AppName Geometry]
}
if {::ini::exists $ini AppName Font} {
    set font [::ini::value $ini AppName Font]
}

# クローズ
::ini::close $ini

バグ

セクションまたはキーを削除できる::ini::deleteというコマンドがありますが、
inifile 0.1ではバグっていてうまく削除できないようです。(INIファイルが壊れます)
とりあえず、::ini::deleteの利用は避けた方がいいでしょう。

マニュアル