テキストファイルを読み出すプログラム(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に示します。