OpenOffice basicでテキストファイル書き出しに際しての情報をまとめておきます。
Printステートメントを使った書き方
テキストファイルに1行ずつ出力する書き方です。この書き方をすると、1行ごとに改行コード(LF)が自動で付加されます。
基本文法
テキストファイルに1行ずつ出力する際には、下記のような形で書けばよいです。
これは最も良く知られている方法ですので、ほとんどのケースはこれで問題無いと思います。
Dim FileNum As Integer
Dim CurrentLine As String
Dim Filename As String
FileNum = Freefile ' ファイルハンドルを初期化
Filename = "C:\temp_data.txt" ' ファイルの場所
Open Filename For Output As #FileNum 'ファイルオープン
Print #FileNo, "Hello world!" 'Line1
Print #FileNo, "Goodby world!" 'Line2
Close #FileNo 'ファイルクローズ
出力結果
Hello world!
Goodby world!
改行をコントロールする
Print文で改行をコントロールするには、セミコロンを使えば良いです。
セミコロンを使うと、内部バッファに一旦格納され、セミコロンが無いPrint文が実行された所で一気に出力されます。
Dim FileNum As Integer
Dim CurrentLine As String
Dim Filename As String
FileNum = Freefile ' ファイルハンドルを初期化
Filename = "C:\temp_data.txt" ' ファイルの場所
Open Filename For Output As #FileNum 'ファイルオープン
Print #FileNo, "Hello "; 'Line1(セミコロンが付いているので、この時点では出力されず内部バッファに格納される)
Print #FileNo, "world! "; 'Line2(セミコロンが付いているので、この時点でも出力されず内部バッファに格納される)
Print #FileNo, "Yes!" 'Line3 (ここでようやく出力される)
Close #FileNo 'ファイルクローズ
出力結果
Hello world! Yes!
出力結果を見ると分かりますが、内部バッファに格納されたタイミングでは改行コードが付与されません。
3番目のPrint文が実行されたタイミングで文字と一緒に最後にLFが付いて出力されます。
参考ページ:
https://help.libreoffice.org/3.5/Basic/Print_Statement_Runtime/ja
TextInputStream ステートメントを使った書き方
より柔軟に書き込みを行う場合には、TextInputStream を使います。
例えば、ファイルの最後を改行で終わらせたくない場合などです。(他にメリットがあれば教えてください)
基本文法
Dim oFileAcc As Object
Dim oOutputStream As Object
oFileAcc = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")
Dim vData As Variant
vData = oFileAcc.openFileWrite("C:\temp_data.txt" ) 'ファイルの場所
oOutputStream.setOutputStream(vData)
oOutputStream.setEncoding( "UTF-8" ) 'エンコードの設定
oOutputStream.writeString( "Hello " ) '文字の書き込み(改行は自動で付与されない)
oOutputStream.writeString( "world!" )
oOutputStream.closeOutput() 'ファイルを閉じる
出力結果
Hello world!
まとめ
Excel VBAとは違ってOpenOffice basicは文献が少ないかつ、同じことを実現しようと思っても随分勝手が違います。
そのため、今後も調べたことは少しでも記しておこうと思います。