LOTUSSCRIPT 言語


ランダムファイル
ランダムファイルは、同じ長さの一連のレコードから構成されます。レコードは、Integer 型や String 型などのスカラーデータ型、またはユーザー定義のデータ型に対応させられます。各レコードは、そのデータ型のメンバに一致するフィールドに分割できます。

ランダムファイルを開く構文は次のとおりです。
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

関連項目