コンテンツの読込み・書き込み

外部リソースについて

Curlアプリケーションでは外部リソースから情報を取得したり外部の送信先に情報を送信する必要があるケースがほどんとです。一般的に以下のような場所でデータがあります。

  • ファイル
  • ディスク
  • ネットワーク上
  • メモリ
  • 別のプログラムあるいはプロセス

Curlはありとあらゆるファイル(テキスト、バイナリ、イメージ)・Webページなどのリソースに対しデータの読込・書込を行うことができます。
ファイルシステム内にある場合はファイルの削除や名前の変更など、一部データリソースを操作することができ
ます。

 

テキストファイルの読込

ほとんど多くの場合データはテキスト形式で保持されてます。
テキストファイルを読み取るにはTextInputStreamオブジェクトを作成する必要があります。TextInputStreamオブジェクトはリソースから一連のデータを取り表すストリームクラスの1つです。ちなみにローカルディスク上のファイルの読み取りと、ネットワークまたは他のソース上のデータのストリームからの読み取りは同じです。ただし、ネットワークリソースと対話(Httpのpostメソッドやgetメソッドなどを使用して)する場合はCurlからリクエストデータおよび返却データを受け渡しする必要があるので少し変わってきます。そちらについては「逆引きリファレンス-サーバー連携」を参照してください。
以下にネットワーク上(あるいはローカルファイルシステム)のテキストファイルを読み込むサンプルをご紹介します。
 

{curl 5.0, 6.0 applet}

{pre {read-from {url “business.txt”}}}

上記のサンプルはread-fromプロシージャを使用したサンプルで、read-fromプロシージャは第一引数のUrlを指定するだけでそのコンテンツを文字列として読込み、StringBufという文字列のオブジェクトを返却します。
上記の例ではpreマクロを使用して読込み結果を表示しています。

 

テキストファイルの一行づつの読み取り

read-fromプロシージャはコンテンツのすべての内容を文字列オブジェクト(StringBuf)に読込みますが、コンテンツがCSVデータのような場合は1行づつ読み込んで処理することが多いと思います。
以下に1行づつ読み込むサンプルを紹介します。

{curl 5.0, 6.0 applet}

{value
   let lines:StringArray = {StringArray}
  
   let location:Url = {url “business.txt”}

   {with-open-streams in = {read-open location} do
       {until in.end-of-stream? do
           {lines.append {{in.read-one-line}.to-String}}
       }
   }

   let display:VBox =  
       {VBox
           background = “beige”,
           border-style = “sunken”,
           border-width = 2pt,
           border-color = “navy”,
           margin = 4pt
       }
   {for line key k in lines do
       {if k==0 then
           {display.add {bold {underline {value line}}}}
        else
           {display.add line}
       }
   }
  
   display
}

上記のサンプルは少し複雑ですが以下にポイントを説明します。

  1. 文字列の配列を作る(これはコンテンツから読み込んだ1行づつの内容を保持するためです。)
  2.  read-openプロシージャを使用してTextInputStreamオブジェクトを生成する。
  3. TextInputStreamクラスのread-one-lineメソッドを使用して一行ずつ読込み、最終行(EOF)まで1の文字列の配列に格納していく。

上記のステップでシーケンシャルファイルを一行ずつ読み込むことができます。

 

イメージの読込み

イメージを簡単に読み込むにはimageテキストプロシージャを使用する方法があります。
以下にImageテキストプロシージャを使用したサンプルをご紹介します。

{image
    source = {url “sample-image.gif”},
||–    下の幅(width)と高さ(height)を設定すると指定したサイズになります。
||–    指定してない場合はイメージのサイズが適用されます。
||–    width = 500pixel,
||–    height = 500pixel,
    tooltip = {Tooltip “画像の説明を記述したりします。”}
}
サポートしているイメージファイル形式は以下の通りです。
  • GIF
  • JPG
  • BMP 4、8、24、または32 ビット深度
  • PPM
  • PNG 8 ビット深度の透過度をサポート

TIFF 複数イメージのファイルの最初のイメージのみ。なお、追加のイメージにアクセスするには、ImageDataクラスを使用する必要があります。

 

書込について

書込みの手順も基本的に読込と同じになります。使用するクラスはTextOutputStreamクラスを使用します。
詳しくは「Curl開発者ガイド→外部リソースとの対話→ファイルやその他のリソースへのアクセス→テキストファイルの読み取りと書き込み →テキストファイルへの書き込み」を参照してください。

  

その他の形式へのアクセスおよび方法

上記で紹介したテキストおよびイメージデータ以外にも様々なデータにアクセスすることができます。例えばバイナリデータや圧縮データです。
また同期読み取りだけでなくAjaxなどで注目された非同期読み取りももちろん可能です。

 

サンプルコードのダウンロード

データの読込みサンプル

 

関連ヘルプドキュメント