LabVIEWでプログラムを書くときの強みの一つは、ユーザーインタフェースであるフロントパネルをドラッグアンドドロップの操作だけで簡単に構築することができることだと思います。
本ブログのまずこれのシリーズでは主にプログラムのアルゴリズムの部分の書き方について解説してきましたが、アルゴリズムを知っているだけではプログラムは書けず、どのような選択肢があるかということも知っておく必要があります。
使い方集は、まずこれのシリーズでステートマシンまでの知識はある程度知っている前提で、アルゴリズム以外に関わるプログラムの書き方について紹介するシリーズです。
本記事ではプログラムの設定などを記録するのにつかわれるiniファイルの扱い方について紹介しています。
iniファイルとは
まずLabVIEWの使い方からは少し離れますが、この記事で扱うiniファイルとは何かについてみていきます。Wikipediaによると、
INIファイルは、ソフトウェアの設定などを記録するために用いられるファイル形式の一つ
https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
と書かれています。
ソフトウェア、とはLabVIEWで作ったプログラム(アプリケーション)が当てはまるので、要はそのプログラムを使用する際の設定などが載っているファイルで、プログラム実行時にその設定を読み込んで実行するといったことを行うためのファイルということになります。

iniファイルという名前は初期化(initialization)から来ているようですが、構成を行うためのファイルとして、構成を意味するconfigurationの文字から拡張子を.confにしたファイルも世の中には存在します。
LabVIEWでもテキストファイルとしてconfファイルを作ることはできますし、以下で紹介する構成ファイルのAPIを使用して.confファイルを扱うこともできます。(そもそもパレット上でも「構成」ファイルという名前のパレットに関数がありますし)
どちらも扱うことができるものの、以下ではiniファイルとして統一して表現することにします。
iniファイルの作り方
LabVIEWでiniファイルを作るのはとても簡単です。まずは作られたiniファイルの中身の一例を紹介します。
本記事で紹介する各プログラム例はこのiniファイルをベースにします。

このような形式のファイルを作りiniファイルとして使用するのですが、これ、普通のテキストファイル用のファイルIOの関数で作ろうと思えばできてしまいます。
が、形式を整えるのに少し面倒です。以下のプログラムは、上のiniファイルの形式をテキストファイルに書き込む関数を駆使して再現しようとしたものです。
作る必要はないと思いますが、「ほぼ」同じ見た目になりますが一部異なります。

この面倒がない、iniファイル作成に特化した関数が、構成ファイルVIパレットに用意されています。

これらの関数を用いて、先ほど示したiniファイルを生成するプログラムを書く場合以下のようになります。

いくつも関数を使用していますが、種類としては3種類だけであり、構造はとてもシンプルで、「iniファイルを用意する」「中身にデータを書き込む」「iniファイルを閉じる」という動作をさせるだけです。

iniファイルの中身にはセクション(iniファイル内では角括弧で囲まれます)とキーという概念があり、大雑把に、セクションは関連するキーをまとめたグループの名称、キーはそのグループの個々の項目名です。
キーにはそれぞれ値が存在し、キー(項目)に紐づいた情報を値として対応させています。
iniファイル作成用の関数ではまさにこれらのセクションとキーと値を指定することになります。

もちろんiniファイル上はすべてのデータがテキストになっているのですが、LabVIEWのプログラム上ではいちいちテキストデータに変換する必要はありません。
例えばiniファイルに数値やブール、ファイルパスの情報を入れたい場合にも特に変換をする必要なく関数に直接配線することができ、関数側で勝手にテキストに直してiniファイルに保存してくれます。

iniファイルの読み取り
設定を保存することができるのであれば、それを読み取ることもできます。
これもいたってシンプルで、書き込みの時同様、セクションとキーを指定してそのキーに対する値を出力結果として得る感じになります。

なお、読み取りの関数でセクションやキーを指定しても、もしそれらのセクションやキーが存在していなかった場合には、デフォルトを設定しておくことができます。
以下の例では、Test PersonというセクションにManage No.というキーはあるもののCountryというキーがない場合の結果です。
キーがない、つまり「検出された?」がFALSEになるというブールの値も得られるので、ある特定のキーがあるかないかでプログラム上の動作を変える条件分岐も実装しやすくなっています。

iniファイルの中身を調べる
iniファイルに対して使用できる他の関数としては、対象とするiniファイルの中のセクション名やキー名を配列として取得する関数があります。
これらを使用することで、そのiniファイルにどのようなセクションやキーが入っているかを確認することができるようになります。

もし「セクションとそのセクションの中のキーとそのキーに対応している値」を全て取得したい場合には、テキスト情報としてすべてを得るように設定することになります。
(まぁこんなことをしたいのならわざわざLabVIEWプログラムを使用せずにiniファイルを直接メモ帳などで開いた方がいい気もしますが)

iniファイルの編集
既存のiniファイルに対する編集を行いたい場合、例えばある特定のセクションにあるキーに対応した値を別の値にするには、そのままセクション、キーを指定すれば上書きすることができます。
ただし、上書きが実際にファイルに保存されるのはファイルを閉じる関数が実行される際に「変更の場合ファイルに書き込む」のブール入力がTRUEになっているときのみです(デフォルトではTRUEになっています)。
もしユーザーの操作の結果次第で上書きをさせたくない場合にはFALSEを入れるようにすれば、最終的にiniファイルは編集前の状態を維持しておくことができます。

また、上書きではなく、セクションやキーを丸々削除したい場合には、それぞれセクションを削除、キーを削除の関数を使用することができます。

この記事では、LabVIEWでiniファイルをどう扱うかについて紹介しました。プログラムを動作させる初期の段階の設定等で使用されるパラメタを保存するために使用されるケースが多いと思います。
プログラム的に、初期設定のパラメタを残しておきたい、あるいはその初期設定のパラメタを読み取りたいという場合に使ってみてください。
ここまで読んでいただきありがとうございました。
コメント