テキストファイルの読み書き
com.sun.star.ucb.SimpleFileAccess サービスを利用したファイルへのアクセスに加えて com.sun.star.io.TextInputStream サービスを利用することでテキストファイルを読み込むことができます。書き込みには com.sun.star.io.TextOutputStream サービスを利用します。 読み込み
読み込みについてです。 TextInputStream サービス
テキストファイルの読み込みには com.sun.star.io.TextInputStream サービスが必要です。CreateUnoService 関数を利用してサービスをインスタンス化します。 Dim oInputStream As Object oInputStream = CreateUnoService("com.sun.star.io.TextInputStream") 読み込みストリームの設定
読み込むデータストリームを設定します。 データストリームは ファイルへのアクセス で利用した 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) 行ごとの読み込み
一行ごとにファイルから読み込むためには 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) 。 ファイルを閉じる
読み込みが終わって必要のなくなったファイルのインプットストリームは閉じておく必要があります。これには closeInput メソッドを使用します。 oInputStream.closeInput() エンコードの指定
テキストファイルから文字列を読み込む際に,日本語などではエンコードが問題になってくることがあります。そのために,読み込むエンコードを指定してテキストファイルを読み込むことができます。 エンコードの指定に使用するメソッドは setEncoding メソッドです。このメソッドは指定したい文字コードを文字列で指定します。 oInputStream.setEncoding( "SJIS" ) のようにします。 その他
次の関数 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 書き込み
書き込みについてです。 TextOutputStream サービス
テキストの書き込みには TextOutPutStream サービスを使用します。CreateUnoService 関数を利用してサービスをインスタンス化します。 Dim oOutPutStream As Object oOutPutStrem = CreateUnoService("com.sun.star.io.TextOutputStream") 書き込みストリームの設定
ファイルへ書き込むためのストリームを取得,設定します。 データストリームは ファイルへのアクセス で利用した 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) 書き込み
ファイルへ書き込むために writeString メソッドを利用します。 oOutputStream.writeString( "Something to write" ) この writeString メソッドでは,改行は手動で追加してやる必要があります。 oOutputStream.writeString( "Something to write!" & Chr(10) & "Nothing." ) ここでは,LF を追加してみました。 ファイルを閉じる
書き込まなくなったファイルは閉じておく必要があります。closeOutput メソッドでアウトプットストリームを閉じてやります。 oOutputStream.closeOutput() エンコードの設定
書き込みの際にも,日本語などの言語の文字を書き込む際にはエンコードを設定してやる必要があります。このためには,setEncoding メソッドを使用します。 oOutputStream.setEncoding( "UTF-8" ) のようにします。(UTF-8 はデフォルトの設定と同じです。) |