LOTUSSCRIPT 言語
ランダムファイルを開く
構文は次の通りです。
Open fileName For Random As fileNumber [Len = recordLength]
recordLength はファイル内の各レコードの長さです。既定の長さは 128 バイトです。
開こうとするファイルが存在しない場合は、新しく作成されます。
レコード型を定義する
ランダムファイルのレコードはすべて同じ長さでなければならないので、型の文字列は固定長にする必要があります。ファイルレコードにコピーされた文字列がレコード長よりも短いと、レコードの残りの部分は変更されずに残されます。また、文字列がレコードよりも長いと、書き込まれるときにレコード長に合わせて切り取られます。
ユーザー定義型の文字列フィールドも固定長にします。可変長の文字列を使用する場合は、Open ステートメントの Len 部分で、ファイルに書き込む文字列の最大の長さを格納するために十分な長さを指定します。また、Len 関数では、レコードの長さの確実な値は返されないので、レコードの長さを予測する必要があります。さらに、Get ステートメントや Put ステートメントでレコード番号を省略すると、レコード間を移動できません。
ユーザー定義型を使用すると、複合レコードを定義できます。
以下に例を示します。
Type emploRec id As Integer ' Integers are 2 bytes long salary As Currency ' Currency is 8 bytes hireDate As Double ' Dates are also 8 bytes lastName As String * 15 ' Fixed-length string of 30 bytes firstName As String * 15 ' Fixed-length string of 30 bytes End Type
型の長さは、実行時に Len 関数を使用して決定できます。
たとえば、このレコードは 78 バイトの長さになるので、Open ステートメントで Len = 78 と指定します。
Dim recLen As Integer, idFile As Integer Dim recHold As emploRec idFile = 1 ' The file number to use for ' this file recLen = Len(recHold) ' The record length for this file Open "DATA.DAT" For Random As idFile Len = recLen
LotusScript 内のランダムファイルに書き込む
ランダムファイルに書き込むには Put ステートメントを使用します。Put ステートメントは、ファイル番号、レコード番号、書き込みデータが設定された変数の 3 つのパラメータを受け取ります。Put ステートメントを使用してレコードの追加や置き換えを行うことはできますが、削除することはできません。ランダムファイルのレコードを置き換えるには、そのレコード番号を使用します。
Dim recNum As Integer recNum = 5 ' Replace record 5 with the contents of recHold. Put idFile, recNum, recHold
ランダムファイルに新しいレコードを追加するには、ファイルのレコード数より大きなレコード番号を使用します。たとえば、5 つのレコードを持つファイルにレコードを追加するには、6 の位置を使用します。
ランダムファイルのレコードを置き換えるには、新しいファイルを作成して、そこに元のファイルから有効なレコードをコピーします。元のファイルを閉じて、Kill ステートメントで削除します。その後、Name ステートメントを使用して、新しいファイルに元のファイルと同じ名前を付けます。また、各レコードの位置を 1 ずつ上げながら移動して、レコードに上書きしていくこともできます。この方法の問題点は、ファイルの最後に重複したレコードが残ることです。
Dim tempRec As emploRec For I = recNum To lastRec - 1 Get idFile, I + 1, tempRec Put idFile, I, tempRec Next I
ランダムファイルから読み込む
ランダムファイルのデータを変数に読み込むには、Get ステートメントを使用します。
次の例は、idFile の番号を持つファイルのレコード番号 5 を変数 recHold に読み込みます。
' The record number to retrieve from the file Dim recNum As Integer recNum = 5 ' The variable to read into Dim recHold As emploRec Get idFile, recNum, recHold
関連項目