ファイルI/O操作により、ファイルとのデータ受け渡しができます。以 下を含むさまざまなファイルI/O処理には、ファイルI/Oパレットにあ るファイルI/O VIおよび関数を使用します。
• データファイルの開閉。
• ファイルに対するデータの読み書き。
• スプレッドシート形式のファイルに対する読み書き。
• ファイルとディレクトリの移動および名前変更。
• ファイル特性の変更。
• 構成ファイルの作成、変更、読み取り。
1つのVIまたは関数によって、ファイルを開き、読み取りまたは書き込 みして、ファイルを閉じることができます。また、関数を使用してプロセ スの各手順を制御することもできます。「計測ファイルから読み取り
(Read From Measurement File)」Express VIと「計測ファイルへ書き
込み(Write To Measurement File)」Express VIを使用して、.lvm、
.tdmまたは.tdmsファイルにデータの読み取りおよび書き込みを行いま
す。
.tdmファイルの詳細については、この章の「ストレージVIを使用する」
のセクションを参照してください。
ファイル I/O の基本
通常のファイルI/O操作には、以下のプロセスが含まれます。
1. ファイルを作成するか、ファイルを開きます。開かれたファイルは、
Refnumと呼ばれる固有の識別子によって表されます。
Refnumの詳細については、第4章「フロントパネルの概要」の
「オブジェクトまたはアプリケーションへのリファレンス」のセク ションを参照してください。
2. 「ファイルI/O」VIまたは関数は、ファイルからのデータを読み取 り、またはファイルへのデータの書き込みを行います。
3. ファイルを閉じます。
「テキストファイルから読み取る(Read from Text File)」および「テキ ストファイルに書き込む(Write to Text File)」関数など、ファイルI/O
VIおよび一部のファイルI/O関数は、一般的なファイルI/O操作で必要 とされる3つの手順をすべて実行できます。複数の操作を行うよう設計 されたVIや関数は、1つの操作を実行する関数よりも効率が悪い場合が あります。
ファイル I/O 形式を選択する
使用するファイルI/OパレットのVIは、ファイルの形式によって異なり ます。ファイルに対するデータの読み書きは、テキスト、バイナリ、およ びデータログの3つの形式で実行できます。使用する形式は、集録また は作成の対象となるデータと、そのデータにアクセスするアプリケーショ ンによって異なります。
使用する形式を決定するには、以下の基本的なガイドラインに従ってくだ さい。
• Microsoft Excelなど、他のアプリケーションでもデータを使用でき
るようにする場合は、テキストファイルを使用します。これは、テキ ストファイルが最も一般的であり、最も移植性が高いためです。
• ランダムアクセスによるファイルの読み書きを実行する必要がある場 合や、速度の向上とディスク容量の節約が非常に重要な場合は、バイ ナリファイルを使用します。これは、バイナリファイルの方がテキス トファイルよりもディスク容量および速度の面で効率が良いためで す。
• 複雑なデータレコードやさまざまなデータタイプをLabVIEWで処理 する場合は、データログファイルを使用します。これは、データへの アクセス元をLabVIEWに限定する場合や、複雑なデータ構造を保存 する必要がある場合、データログファイルがデータの保存に最適であ るためです。
通常、データのASCII表現はデータ自体よりもサイズが大きいため、元 のデータがテキスト形式でなくグラフやチャートなどのデータである場 合、テキストファイルはバイナリファイルやデータログファイルよりも多 くのメモリを使用します。たとえば、-123.4567という数値は、4バイト の単精度浮動小数点数として保存できます。ただし、この数値のASCII 表現は、1文字あたり1バイトずつの合計9バイトを使用します。
また、テキストファイル内の数値データにランダムにアクセスするのは困 難です。これは、文字列内の各文字が正確に1バイトの容量を使用して いても、数値をテキストとして表現するために必要な容量が一定ではない ためです。テキストファイル内の9番目の数値を検出するには、
LabVIEWはまず、その前にある8つの数値を読み取り変換する必要があ
ります。
一般的なファイル I/O 操作の VI および関数を使用する
ファイルI/Oパレットには、以下のデータタイプの書き込みや読み取り を行うなど、一般的なファイルI/O操作について設計されたVIおよび関 数が含まれます。
• スプレッドシードテキストファイルの数値
• テキストファイルの文字
• テキストファイルの行
• バイナリファイルのデータ
以下のブロックダイアグラムは、「スプレッドシートファイルに書き込む
(Write To Spreadsheet File)」VIを使用してタブ区切りのスプレッド
シートファイルに数値を送信する方法を示しています。このVIを実行す
ると、LabVIEWは、既存ファイルへのデータの書き込みまたは新規ファ
イルの作成をユーザに要求します。
開く、読み取る、書き込むための関数には、ファイルパスの入力が必要で す。ファイルパスを配線しない場合は、読み書きの対象となるファイルを 指定するためのダイアログボックスが表示されます。
ファイルI/Oパレットには、各ファイルI/O操作を個別に制御する関数 が含まれます。これらの関数を使用して、ファイルを作成したり、開いた り、データを読み取り/書き込みしたり、ファイルを閉じることができま す。また、これらの関数を使用すると、以下のタスクを実行できます。
• ディレクトリの作成。
• ファイルの移動、コピー、または削除。
• ディレクトリの内容のリスト。
• ファイル特性の変更。
• パスの操作。
以下に示すパスは、ディスク上のファイルの場所を識別するLabVIEW データタイプです。
パスは、ファイルが格納されているボリューム、ファイルシステムのトッ プレベルとそのファイル間のディレクトリ、およびそのファイルの名前を 記述します。パス制御器またはパス表示器では、特定のプラットフォーム の標準構文を使用してパスを入力または表示します。
パス制御器および表示器の詳細については、第4章「フロントパネルの 概要」の「パス制御器および表示器」のセクションを参照してください。
以下のブロックダイアグラムは、ファイルI/O関数を使用してタブ区切 りのスプレッドシートファイルに数値データを送信する方法を示していま す。このVIを実行すると、「ファイルを開く/作成/置換
(Open/Create/Replace)」関数がnumbers.xlsファイルを開きます。
「テキストファイルに書き込む(Write to Text File)」関数は、数字の文字 列をファイルに書き込みます。「ファイルを閉じる(Close File)」関数は ファイルを閉じます。ファイルを閉じないと、ファイルがメモリ内に残っ ているため、他のアプリケーションまたは他のユーザはそのファイルにア クセスできません。
前述のブロックダイアグラムを、同じタスクを完了する「スプレッドシー トファイルに書き込む(Write to Spreadsheet)」VIと比較してくださ い。前述のブロックダイアグラムは、各ファイル操作に個別の関数を使用 しています。これには、「配列からスプレッドシート文字列に変換
(Array To Spreadsheet String)」関数を使用して数値の配列を文字列と してフォーマットする操作が含まれます。「スプレッドシートファイルに 書き込む(Write To Spreadsheet File)」VIは複数のファイル操作を完 了します。これには、ファイルを開き、数値の配列を文字列に変換して、
ファイルを閉じる操作が含まれます。
上級操作のファイルI/O VIおよび関数を使用するサンプルについては、
labview¥examples¥file¥datalog.llbのWrite Datalog File
Example VIを参照してください。
ファイルI/O関数を使用して、ディスクストリーミング操作を実行する こともできます。ディスクストリーミングを行うと、ファイルの開閉時に 関数がオペレーティングシステムと対話する回数が低減され、メモリリ ソースが節約されます。ディスクストリーミングは、ループ内などで複数 の書き込みを実行している間、ファイルを開いたままにしておくためのテ クニックです。パス制御器または定数を「テキストファイルに書き込む
(Write to Text File)」関数、「バイナリファイルに書き込む(Write to
Binary File)」関数、または「スプレッドシートファイルに書き込む
(Write to Spreadsheet File)」VIに書き込むと、関数またはVIを実行す
るたびにファイルを開閉するオーバーヘッドが追加されます。同じファイ ルを頻繁に開閉しないようにすると、VIの効率を向上させることができ ます。
通常のディスクストリーミング操作を作成するには、ループの前に「ファ イルを開く/作成/置換(Open/Create/Replace File)」関数を配置 し、ループで関数の読み取りまたは書き込みを行い、ループの後で「ファ イルを閉じる(Close File)」関数を配置します。これで、各反復でファ イルの開閉に関連したオーバーヘッドなしでループ内でファイルへの書き 込みを継続的に実行できます。
ディスクストリーミングは、実行速度が重要な、大量のデータ集録に最適 です。集録の実行中は、ファイルにデータを連続的に書き込むことができ ます。最適な結果を得るには、集録が完了するまで、解析VIや解析関数 などの他のVIや関数を実行しないでください。