テキストファイルを読み出すプログラム(Curl版)
それでは、リスト1と同じ機能のプログラムをCurlで作ってみましょう。
Curl IDEを起動したら、「ファイル」メニューから「新規プロジェクト」を選択して、「ReadTextFile」というマニュフェスト名で「アプレットプロジェクト」を作成してください。IDEの左側にあるツリーで「start.curl」をダブルクリックしてコードエディタを表示させたら、リスト2に示したコードを記述してください。VB 6.0のコードと比較しやすいように、Curlのコードでも、できるだけ同じ変数名を使い、同じコメントを付けています。
{curl 6.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{applet manifest = "manifest.mcurl",
{compiler-directives careful? = true}
}
|| 変数の宣言
{let file-name:#Url}
{let text-input-stream:#TextInputStream}
{let buff:StringBuf = {new StringBuf}}
{let text1:TextFlowBox = {new TextFlowBox}}
{do
|| ファイルを開くダイアログボックスを表示する
set file-name = {choose-file}
|| エラー時にはcatchにジャンプする
{try
|| ファイルが選択されたら読み出す
{if-non-null file-name then
|| ファイルを開く
set text-input-stream =
{read-open character-encoding =
{get-character-encoding-by-name "shift-jis"}, file-name}
|| ファイルを末尾まで読み出す
{until text-input-stream.end-of-stream? do
set buff = {text-input-stream.read-one-line} || 1行読み出す
{text1.add buff} || テキストボックスに追加する
{text1.add {br}} || 行末に改行を付加する
}
||ファイルを閉じる
{text-input-stream.close}
}
catch e:IOException do
|| エラー処理
{popup-message "エラーです!"}
}
}
|| テキストボックスを表示する
{center
{value text1}
}
リスト2のポイント(VB 6.0のコードとの主な違い)を説明しましょう。Curlでは、TextInputStreamオブジェクトを使ってテキストファイルを読み出します。ストリームとは、データの流れのことです。Curlではファイルアクセスや、後述するWebアクセスでストリームという概念を使います。TextInputStreamオブジェクトに指定するファイル名は、Urlオブジェクトとして指定します。
Curlでは、{try・・・catch・・・} という構文でエラー処理を行います。これを「例外処理」と呼びます。try以降に記述されたコードが実行時エラーになった場合、処理の流れがcatch以降にジャンプします。エラーが発生しなかった場合は、catch以降の処理は行われません。トライしてエラーになったら、それをキャッチするというイメージです。tryとcatchによる例外処理は、Curl独自のスタイルではなく、JavaやC#などのオブジェクト指向言語でも採用されています。
その他の部分は、コメントを参考にしてVB 6.0のコードと比較すれば理解できるでしょう。リスト2の実行結果の例を、図2に示します。


