Top > OOoBasic > Generic > textfile

テキストファイルの読み書き Edit

com.sun.star.ucb.SimpleFileAccess サービスを利用したファイルへのアクセスに加えて com.sun.star.io.TextInputStream サービスを利用することでテキストファイルを読み込むことができます。書き込みには com.sun.star.io.TextOutputStream サービスを利用します。

読み込み Edit

読み込みについてです。

TextInputStream サービス Edit

テキストファイルの読み込みには com.sun.star.io.TextInputStream サービスが必要です。CreateUnoService 関数を利用してサービスをインスタンス化します。

Dim oInputStream As Object
  oInputStream = CreateUnoService("com.sun.star.io.TextInputStream")

読み込みストリームの設定 Edit

読み込むデータストリームを設定します。

データストリームは ファイルへのアクセス で利用した com.sun.star.ucb.SimpleFileAccess サービスから取得します。

読み込みのためのデータストリームは読み込み専用でファイルを開くために,SimpleFileAccess サービスの openFileRead メソッドから XInputStream インターフェースを取得します。

Dim oFileAcc As Object
Dim oInputStream As Object
 oFileAcc = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
 oInputStream = CreateUnoService("com.sun.star.io.TextInputStream")

そしてそのインターフェースを TextInputStream オブジェクトに setInputStream メソッドで読み込みデータストリームとして設定します。

Dim vData As Variant
vData = oFileAcc.openFileRead(sUrl)
oInputStream.setInputStream(vData)

行ごとの読み込み Edit

一行ごとにファイルから読み込むためには readLine メソッドを使用します。

sLine = oInputStream.readLine()
MsgBox sLine

とすることで,ファイルの内容を一行読み込むことができます。readLine メソッドで一行読み込むと,LF や CR といった改行に使用される行末の文字が削除されます。

ファイルの内容をファイルの最後まで順に読み込んでいく場合には,ファイルの終端に来ているかどうかを調べるメソッド isEOF を併用します。この isEOF メソッドは,読み込む位置がファイルの終端の場合に true を戻します。

次のようにすることでファイルを一行ずつ順にファイルの終端まで読み込むことができます。

While NOT oInputStream.isEOF()
  sLine = oInputStream.readLine()
  sDataLine = sDataLine & sLine & Chr(10)
WEnd

readLine メソッドでは戻される文字列に対して改行コードが削除されているので,追加してやる必要があります。例えば,CR+LF なら Chr(13) & Chr(10) 。

ファイルを閉じる Edit

読み込みが終わって必要のなくなったファイルのインプットストリームは閉じておく必要があります。これには closeInput メソッドを使用します。

oInputStream.closeInput()

エンコードの指定 Edit

テキストファイルから文字列を読み込む際に,日本語などではエンコードが問題になってくることがあります。そのために,読み込むエンコードを指定してテキストファイルを読み込むことができます。

エンコードの指定に使用するメソッドは setEncoding メソッドです。このメソッドは指定したい文字コードを文字列で指定します。

oInputStream.setEncoding( "SJIS" )

のようにします。

その他 Edit

次の関数 FileLoader は,ファイルの Url を与えるとファイルが存在すればテキストファイルを読み込んで文字列として内容を戻します。

Function FileLoader(sUrl As String) As String
Dim sLine As String, sDataLine As String
Dim oFileAcc As Object, oInputStream As Object
Dim vData As Variant
  oFileAcc = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
  oInputStream = CreateUnoService("com.sun.star.io.TextInputStream")
  If oFileAcc.exists(sUrl) Then
    vData = oFileAcc.openFileRead(sUrl)
    oInputStream.setInputStream(vData)
    While NOT oInputStream.isEOF()
      sLine = oInputStream.readLine()
      sDataLine = sDataLine & sLine & Chr(10)
    WEnd
    oInputStream.closeInput()
    FileLoader = sDataLine
  End if
End Function

書き込み Edit

書き込みについてです。

TextOutputStream サービス Edit

テキストの書き込みには TextOutPutStream サービスを使用します。CreateUnoService 関数を利用してサービスをインスタンス化します。

Dim oOutPutStream As Object
  oOutPutStrem = CreateUnoService("com.sun.star.io.TextOutputStream")

書き込みストリームの設定 Edit

ファイルへ書き込むためのストリームを取得,設定します。

データストリームは ファイルへのアクセス で利用した com.sun.star.ucb.SimpleFileAccess サービスから取得します。

書き込むためには,ファイルを書き込める状態で開いてやります。SimpleFileAccess サービスの openFileWrite メソッドから XOutputStream インターフェースを取得します。

Dim oFileAcc As Object
Dim oOutputStream As Object
  oFileAcc = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
  oOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")

そしてそのインターフェースを TextOutputStream オブジェクトに setOutputStream メソッドで読み込みデータストリームとして設定します。

Dim vData As Variant
  vData = oFileAcc.openFileWrite(sUrl)
  oOutputStream.setOutputStream(vData)

書き込み Edit

ファイルへ書き込むために writeString メソッドを利用します。

oOutputStream.writeString( "Something to write" )

この writeString メソッドでは,改行は手動で追加してやる必要があります。

oOutputStream.writeString( "Something to write!" & Chr(10) & "Nothing." )

ここでは,LF を追加してみました。

ファイルを閉じる Edit

書き込まなくなったファイルは閉じておく必要があります。closeOutput メソッドでアウトプットストリームを閉じてやります。

oOutputStream.closeOutput()

エンコードの設定 Edit

書き込みの際にも,日本語などの言語の文字を書き込む際にはエンコードを設定してやる必要があります。このためには,setEncoding メソッドを使用します。

oOutputStream.setEncoding( "UTF-8" )

のようにします。(UTF-8 はデフォルトの設定と同じです。)


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes