ポストスクリプトの入門セクションで頻繁に言及されていない、ポストスクリプトのファイルIOのいくつかのトリックとショートカットがあります。その中で最も秘密の秘密は 'トークン'演算子です。 (ネームタイプオブジェクトを生成する)、数字(整数型または実体オブジェクトを返す )、またはこれらの配列を読み込むためにインタプリタのスキャナを借りることができます(ただし、実行可能配列の表記法を使用する場合のみ中括弧、それ以外の場合は、左角括弧を表すマークタイプオブジェクトを取得します)。簡単な例として
は、私は多くの場合、PostScriptプログラムで拡張解説セクションを埋め込むために、このワンライナーを使用します。
%!
{ currentfile token pop /END-COMMENT eq {exit} if } loop
Each word here is read from the current file and converted
into a name object and compared to "/END-COMMENT".
It can have but does not need a preceeding slash.
This program produces an image of a snowman in a blizzard,
suitable for use as stationary.
END-COMMENT
showpage
編集:私は今、これは本当にひどい答えであることを認識 .. 。 これまでのところ。
(Some
multi-line
text)
pop
だから、本当のためにこの時間:
私の例では、上記よりも少しあります。
まず、loop
が必要です。
{
} loop
このループの内側には、いくつかのデータがあります。
/src (datafile) (r) file def
{
src readline
} loop
ご覧のとおり、ファイル読み取り演算子はすべて、スタックの先頭にブール値を返します。完璧!
/src (datafile) (r) file def
{
src readline {
}{
exit
} ifelse
} loop
だから、何かをしてループし続けますブール真が、(ノーモア・データ)ブール偽のループが終了します。しかし、readline
にはデータを入れる文字列が必要です。そして、それは偽の場合でも文字列を返します。
/src (datafile) (r) file def
/str 80 string def
{
src str readline {
processline
}{
pop exit
} ifelse
} loop
ファイルからのデータの行(最大80文字)を含む文字列があります。 Postscriptの構文に全く似ている場合は、ループ内でtoken
を使用することができます(最初の例のように、ファイルから各単語を読み取り、実行可能名に変換してリテラル名と比較します)ループ)。または、ループ内でget
(またはforall
ループ)を使用して、各バイトを整数として抽出できます。しかし、すばらしいことはsearch
です。
この手順では、文字列をスペース区切りの単語でスキャンし、各行をstdoutに1行ずつ出力します。
/processline { % (line)
() { % (line) ()
search { % (post) () (pre)
=
}{ % (no-match)
=
exit
} ifelse
} loop
} def
ここでは、最後の単語に同じことを他のものと同じようにしたい場合は、通常、ここで重複するのが簡単です。はです。一番上の文字列を処理するには手間がかかります次にをテストしてください。本当に面倒なことではありません。幸いなことにsearch
は結果を返す便利な順序です。それはあなたがそれを扱うことができるように、文字列の先頭を上に置きます。それから、それはあなたに "マッチ"(これはあなたが最初に与えた "シーク"と同じですが(現行のストリングに参照されていますが))と残りの部分を与えます。それらはループの次の段階のために既に正しい順序になっています。
外部ファイルから読み込んだスペース区切りの単語はどうしますか?
数字を表す場合は、cvi
またはcvr
とすることができます。英数字の場合は、print
またはshow
です。またはcvn
を使用し、それらを原子記号として使用します。
私はwaybackmachineのリンクを見つけるために時間を取ることができるなら私はそれを+2にするだろう。ありがとう。 – dmckee
ええと、私はこのポストスクリプトで2日間しか行っていませんでしたが、私は誰か "ポストスクリプトで考える"という人は...狂っていなければならないと思っていますか?しかし、素晴らしい参照。 –