この記事で扱っていること
- iniファイルをカスタマイズする方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
プログラムにおけるiniファイル(構成ファイル)は、初期値を保存している等の役割を果たし、そのプログラムの中で使用されるパラメタを初期化する際に参照される値を保存しているファイルになります。
プログラム的に作ることもできますが、所詮はテキストファイルなので、一部のパラメタを変更するだけであればテキストファイルとして開いて変更したい値を編集することができます。
アプリケーションによっては膨大な量の初期値を保存する必要があると思いますが、その中で特定の値を探すのが面倒なとき、アルファベット順に項目が並んでいると探しやすいので、既存iniファイルの項目をアルファベット順にソートする方法を紹介します。
また、iniファイルの各セクションの内容を分かりやするくするためのコメントを付ける方法も後半で紹介しています。
どんな結果になるか
今回は以下のような構造を持つiniファイルを例にとります。
プログラムで処理することで、以下のようにセクションがアルファベット順に並びます。
記事後半では、セクションだけでなくセクションの中身の項目であるキーもアルファベット順にする方法、そして各セクションに対して説明文(コメント)を追加する方法も紹介しています。
プログラムの構造
iniファイルの中にどのようなセクションがあるかは構成ファイル関数を使用していますが、実際に中身を並び替える際には通常のファイルI/O関数を使用しています。
iniファイルにどのようなセクションがあるか、をリストするために、セクション名を取得関数を使用し、この時点で1D配列ソートでアルファベット順にしています。
この結果に対してForループの中でキー名を取得関数を使用していますが、その結果の配列のサイズをForループの外に出すようにしています。
構成ファイル関数パレット内の関数でiniファイルを開き終えたら、今度は通常のファイルIOの関数を使用して同じiniファイルを1行ずつ読んでいます。
セクション名(をアルファベット順に並び替えた)配列と、通常のファイルIOの関数でiniファイルを1行ずつ読みとった配列を使用して、それぞれのセクションがどの行にあるかを判定しているのが下図の最初のForループです。
各セクションが始まる行がわかったら、既に各セクションにキーが何個あるかは調べてあるので、セクションが始まる行+キーの数の行を、iniファイルを1行ずつ読み取った配列から部分配列で抜き出して、ファイルに改めて保存しなおしていけば終わりです。
なお、途中で部分配列置換を使用して最後の要素に復帰改行を追加している部分がありますが、これがない場合にはiniファイル上でセクションの終わりと次のセクションの始まり部分で空白行ができない結果が得られることになります。
キー名もソートする場合
上で紹介したのはセクション部分をアルファベット順にソートしたプログラムですが、同様にキーの部分もソートすることができます。
上で紹介したプログラムとほとんど共通していて、違いとしては以下の図の赤枠で示した部分について、キーの部分だけ抜き出して1D配列ソートを行うだけです。
コメントを入れる場合
最後に、iniファイルにコメントを入れる方法を紹介します。
iniファイルに対してコメントは、行の先頭に「;(セミコロン)」をつけることで付与することができます(これ以外の方法もあるかもしれませんが)。
こうすることで、iniファイルの要素としてみなされなく、それでいてそれぞれのキーは正しく読み取られるようになります。
今回は各セクションに対してコメントを付けられるようにしています。
プログラムの例は以下のようで、今までのプログラムに少し手を加えるだけでできます。
セクション名の表示器は構成ファイル関数でセクション名のリストを取得してから1D配列ソートの関数を使用した後につけています(下図だと左上部分)。
本記事ではiniファイルをカスタマイズする方法を紹介しました。
iniファイルの扱いについては大きなアプリケーションだったり誰かに配布する必要があるアプリケーションであるほど出番が多くなると思いますが、そんなときにより扱いやすいファイルとする方法として本記事の内容が役に立てばうれしいです。
ここまで読んでいただきありがとうございました。
コメント