ファイルおよびディレクトリ (Apache OpenOffice 実行時ライブラリ)
Template:EN/Documentation/BASICGuideTOC/v2
ファイル操作は、アプリケーションの基\'96\'7b機\'94\'5cの 1 つです。Template:API には、StarSuite ドキュメントの作成、オープン、編集用に必要となる、各種のオブジェクトが用意されています。OOo詳細情報については、 「Apache OpenOffice API について」を参照してください。また状況によっては、ファイルシステムの直接アクセス、ディレクトリの検索、テキストファイルの編集などを行う必要もあります。Apache OpenOffice Basic の実行時ライブラリには、このような処理を行うための関数が各種用意されています。
Contents
ファイル操作
ディレクトリ内のファイル検索
Dir Basic でディレクトリシステム内でのファイルやサブディレクトリの検索を行うには、Apache OpenOffice 関数を使用します。Dir 関数を最初に使用する際には、検索するディレクトリのパスを第 1 パラメータとして指定する必要があります。Dir 関数の第 2 パラメータには、検索するファイルやディレクトリの名前を指定します。この関数の戻り値としては、最初にヒットしたディレクトリエントリが Apache OpenOffice Basic により返されます。次の該当エントリを取得するには、パラメータを付けずに再度 Dir 関数を呼び出します。該当するエントリが存在しなかった場合、Dir 関数は空白文字列を返します。
以下のサンプルコードでは、Dir 関数を使って、指定ディレクトリ内に存在するすべてのファイルを一覧表示します。この手続きでは、個々のファイル名を変数 AllFiles に記録してゆき、最後の段階でメッセージ\'83\'7bックスに一括\'95\'5c示させています。
Sub ShowFiles Dim NextFile As String Dim AllFiles As String AllFiles = "" NextFile = Dir("C:\", 0) While NextFile <> "" AllFiles = AllFiles & Chr(13) & NextFile NextFile = Dir Wend MsgBox AllFiles End Sub
0 関数の第 2 パラメータに Dir (ゼロ) を指定しているのは、ディレクトリを無視してファイル名のみを Dir 関数の戻り値に返させるためです。このようなパラメータ値としては、以下のものを指定できます。
- 0:通常のファイルのみを対象とする。
- 16:サブディレクトリのみを対象とする。
以下のサンプルコードでは、基本的に上記のものと同じ処理を行なっていますが、こちらは Dir 関数の第 2 パラメータに 16 を指定しているので、ファイルではなくサブディレクトリを対象にしています。
Sub ShowDirs Dim NextDir As String Dim AllDirs As String AllDirs = "" NextDir = Dir("C:\", 16) While NextDir <> "" AllDirs = AllDirs & Chr(13) & NextDir NextDir <nowiki>= Dir</nowiki> Wend MsgBox AllDirs End Sub
ディレクトリの作成および削除
Apache OpenOffice Basic でディレクトリを作成するには、MkDir 関数を使用します。
MkDir ("C:\SubDir1")
この関数は、ディレクトリおよびサブディレクトリを作成します。また必要であれば、指定ディレクトリに対する下層ディレクトリも作成できます。たとえば C:\SubDir1 ディレクトリのみが存在する状況で以下のコードを実行したとします。
MkDir ("C:\SubDir1\SubDir2\SubDir3\")
この場合、C:\SubDir1\SubDir2 ディレクトリおよび C:\SubDir1\SubDir2\SubDir3 ディレクトリの両方が作成されます。
ディレクトリを削除するには、RmDir 関数を使用します。
RmDir ("C:\SubDir1\SubDir2\SubDir3\")
ディレクトリにサブディレクトリまたはファイルが含まれている場合、それらも削除されます。このため、RmDir を使用する場合は、注意が必要です。
ファイルのコピー、名前変更、削除および存在確認
次の呼び出しでは、Source: という名前で、Destination ファイルのコピーが作成されます。
FileCopy(Source, Destination)
次の関数を使用すると、OldName ファイルを NewName という名前に変更できます。このようにコン\'83\'7dを使わずキーワード As を使用するのが、Basic 言語の基\'96\'7b形です。
Name OldName As NewName
次の呼び出しでは、Filename ファイルが削除されます。ディレクトリ (およびその中のファイル) を削除するには、RmDir 関数を使用してください。
Kill(Filename)
特定のファイルが存在するかを確認するには、FileExists 関数を使用します。
If FileExists(Filename) Then MsgBox "file exists." End If
ファイル属性の取得と変更
ファイル関連の処理を行う際には、ファイル属性の変更、最終変更日の取得、ファイルサイズの確認などの操作が必要となる場合があります。
次の呼び出しでは、ファイルに関するいくつかの属性が返されます。
Dim Attr As Integer Attr = GetAttr(Filename)
戻り値はビット\'83\'7dスクの形式で返され、その中には以下のような情報が含まれています。
- 1 : 読み取り専用のファイル
- 16 : ディレクトリ名
ここでは、test.txt という名前のファイルのビットマスクを取得して、その情報を基に、読み取り専用であるかどうか、またディレクトリであるかどうかを調べています。どちらにも該当しなかった場合は、変数 FileDescription に「normal」という文字列を代入させています。
Dim FileMask As Integer Dim FileDescription As String FileMask = GetAttr("test.txt") If (FileMask AND 1) > 0 Then FileDescription = FileDescription & " read-only " End IF If (FileMask AND 16) > 0 Then FileDescription = FileDescription & " directory " End IF If FileDescription = "" Then FileDescription = " normal " End IF MsgBox FileDescription
ファイル属性を変更するには、SetAttr 関数を使用します。次の呼び出しは、指定ファイルに読み取り専用の属性を設定しています。
SetAttr("test.txt", 1)
逆に、ファイルの読み取り専用属性を解除するには、以下のように指定します。
SetAttr("test.txt", 0)
ファイルを最後に変更した日付と時刻を調べるには、FileDateTime 関数を使用します。このようにして得られる日付の書式は、システムのロケール設定に従います。
FileDateTime("test.txt") ' Provides date and time of the last file amendment.
ファイルサイズを調べるには、FileLen 関数を使用します (戻り値はロング整数のバイト値)。
FileLen("test.txt") ' Provides the length of the file in bytes
テキストファイルの書き込みと読み取り
Apache OpenOffice Basic には、ファイルの書き込みおよび読み取り用の各種メソッドが用意されています。以下の説明は、テキストファイル関係の機\'94\'5cをまとめたものです (注意: StarSuite の文書ドキュメントに関するものでは ありません)。
テキストファイルへの書き込み
テキストファイルにアクセスするには、該当ファイルを事前にオープンしておく必要があります。その際には、フリーの ファイルハンドル を使って、アクセスするファイルを特定します。
フリーのファイルハンドルの取得には、FreeFile 関数を使用します。このハンドルは、Open 命令によるファイルオープン時にパラメータとして指定します。テキストファイルとしてファイルをオープンするには、以下のように Open 命令を記述します。
Open Filename For Output As #FileNo
Filename<Check Alignment of PHs>ここで には、ファイル名を文字列の形で指定します。FileNo同じく には、FreeFile 関数で取得しておいたファイルハンドルを指定します。
オープンしたファイルに対しては、Print 命令により、1 行単位の書き込みが行えます。
Print #FileNo, "This is a test line."
FileNo<Check Alignment of PHs>ここでも はファイルハンドルを示します。第 2 パラメータのテキストは、テキストファイルへ書き込む行の内容を示します。
書き込みの終了したファイルに対しては、Close によるクローズ処理が必要です。
Close #FileNo
この場合も、ファイルハンドルを指定する必要があります。
以下のサンプルコードは、ファイルのオープンから、書き込み、クローズまでの流れを示します。
Dim FileNo As Integer Dim CurrentLine As String Dim Filename As String Filename = "c:\data.txt" ' Define file name FileNo = Freefile ' Establish free file handle Open Filename For Output As #FileNo ' Open file (writing mode) Print #FileNo, "This is a line of text" ' Save line Print #FileNo, "This is another line of text" ' Save line Close #FileNo ' Close file
テキストファイルの読み取り
テキストファイルの読み取りは、書き込みと同様の手順で行います。ただし Open 命令によるファイルのオープン時には For Input の代わりに For Output を指定し、Print 命令によるデータの書き込みではなく Line Input 命令によるデータの読み込みを行う点が異なります。
テキストファイルの呼び出し時に、eof 命令を使用して、ファイルの末尾に到達したかどうかを確認します。
eof(FileNo)
以下のサンプルコードは、テキストファイルからのデータの読み取り手順を示します。
Dim FileNo As Integer Dim CurrentLine As String Dim File As String Dim Msg as String ' Define filename Filename = "c:\data.txt" ' Establish free file handle FileNo = Freefile ' Open file (reading mode) Open Filename For Input As FileNo ' Check whether file end has been reached Do While not eof(FileNo) ' Read line Line Input #FileNo, CurrentLine If CurrentLine <>"" then Msg = Msg & CurrentLine & Chr(13) end if Loop ' Close file Close #FileNo Msgbox Msg
ここでは、Do While ループを使ってデータを 1 行ずつ読み出しては、変数 Msg に追加することにより格納してゆき、最後にまとめてメッセージボックスに出力させています。
Content on this page is licensed under the Public Documentation License (PDL). |