1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenOffice basicでテキストファイル書き出しのあれこれ

Posted at

OpenOffice basicでテキストファイル書き出しに際しての情報をまとめておきます。

Printステートメントを使った書き方

テキストファイルに1行ずつ出力する書き方です。この書き方をすると、1行ごとに改行コード(LF)が自動で付加されます。

基本文法

テキストファイルに1行ずつ出力する際には、下記のような形で書けばよいです。
これは最も良く知られている方法ですので、ほとんどのケースはこれで問題無いと思います。

macro.vb
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!

参考ページ:
https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Files_and_Directories_(Runtime_Library)

改行をコントロールする

Print文で改行をコントロールするには、セミコロンを使えば良いです。
セミコロンを使うと、内部バッファに一旦格納され、セミコロンが無いPrint文が実行された所で一気に出力されます。

macro.vb
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 を使います。
例えば、ファイルの最後を改行で終わらせたくない場合などです。(他にメリットがあれば教えてください)

基本文法

macro.vb
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は文献が少ないかつ、同じことを実現しようと思っても随分勝手が違います。
そのため、今後も調べたことは少しでも記しておこうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?