文字列ファイル

要約:
  • 文字列を読み取り可能なストリームに変換するには、Curl® 言語の文字列ファイルを使用します。
  • 文字列をストリームに変換するには、StringInterface.to-InputStream を使用します。
ときには、String またはファイルのいずれかからデータを読み取る必要が生じます。たとえば、プログラムがコマンド ライン引数を取る場合、処理されるデータを格納するファイルをユーザーが指定するというオプションを提供するか、またはコマンド ライン上の文字列でデータを指定できるようにするでしょう。通常は、処理されるデータを読み取るために 2 つのルーチンを書く必要があります。1 つはファイルからデータを読み取るルーチン、もう 1 つはリテラル文字列を解析するルーチンです。
この代わりに、Curl 言語の文字列ファイルを使用して文字列を読み取り可能なストリームに即時に変換することができます。これにより、ファイルからデータを読み取るのに使用するのと同じコードで文字列からデータを読み取ることができます。
文字列をストリームに変換するには、StringInterface.to-InputStream を使用します。入力ストリームとして、文字列を curl://string ディレクトリのファイルとして開くという別の方法もあります。
指定された文字列は curl://string ディレクトリ内の任意のファイルとして扱われ、読み取られる String がファイル名になります。結果として TextInputStreamString が格納されます。
文字列ファイルを簡単に作成できるように、Curl 言語では string-url プロシージャを提供しています。これは、ストリームから読み取るテキストを含む String を引数とし、curl://string ディレクトリで解析された Url をストリームとして開ける状態にして返します。

例: string-url プロシージャ
{value
    || create a string to be read as a stream
    let mystring:String = "This is some data I want to read"

    || Construct a Url under the curl://string directory, using the
    || string we want to read as the filename.
    let myurl:Url = {string-url mystring}

    || Now, read from it as if it were a normal file.
    let myinput:#TextInputStream
    let result:StringBuf = {StringBuf}
    {try
        set myinput = {read-open myurl}
        {until myinput.end-of-stream? do
            {result.concat {myinput.read-one-line}}}
     finally {if-non-null myinput then {myinput.close}}
    }
    result
}
ユーザーがファイル名ではなくリテラル文字列を指定した場合は、これが認識されるのが普通です。次に必要なステップは、curl://string ディレクトリのファイルとして識別するための Url を作成し、String をファイル名として使用することです。このステップが完了したら、この Url はテキスト ファイルを開いて読み取りを実行するためのメソッドまたはプロシージャに渡せるようになります。