2011-09-25 16 views
11

ポストスクリプトでは、cvs * オペレータ *は数字を文字列に変換すると言われています。私はそれをどのように使うべきですか? 私が試した:追記:整数を文字列に変換する方法は?

100 100 moveto 
3.14159 cvs show 

または

100 100 moveto 
3.14159 cvs string show 

が、それは動作しませんでした。

助けが必要ですか?

答えて

10

お試し3.14159 20 string cvs show

stringは、サイズを必要とし、作成した文字列をスタックに残します。 cvsには、変換された値を格納する値と文字列が必要です。

あなたは文字列変換の多くをやっている場合、1つの文字列を作成し、各変換でそれを再利用する方が効率的かもしれ:

/s 20 string def 
3.14159 s cvs show 
11

共通イディオムはテンプレートとして文字列リテラルを使用することです。

1.42857 (  ) cvs show 

さらに大きな文字列のさまざまな部分文字列でcvsを表示することで、フォーマットされた出力を行うこともできます。

%....... 
(2/7 =  ) dup 6 7 getinterval 
2.85714 exch cvs pop show 

しかし、Ghostscript Style Guideはこれを禁じます。そして、私たちが持っている唯一のポストスクリプトスタイルガイドです。 (comp.lang.postscriptのA discussion about this)です。一般的には、必要なときに新鮮な文字列を割り当て、ガベージコレクタにその保持を許可させることをお勧めします。最後の手段として、本当に怠惰なハッカーが=stringをハイジャックします

4.28571 7 string cvs show 

、内蔵された(もちろん、使用して、我々の友人cvs)出力番号に===で使用される128バイトのバッファ。

5.71428 =string cvs show 

そして、あなたそのような場合、あなたは=の他のトリックとそれを組み合わせることができます。すぐに評価の名前。

{ 7.14285 //=string cvs show } % embed =string in this procedure 

これは、余分なマイクロ秒を削減し、コードをインタラクティブに検査することを非常に困難にします。この手順で==を呼び出すと、=stringを使用しているという事実は分かりません。他の文字列と同じように見えます。


a post by Helge Blischke in comp.lang.postscriptからもう1つのトリックです。これはゼロ埋め込み整数を得る簡単な方法です。

/bindec   % <integer> bindec <string_of_length_6> 
{ 
     1000000 add 7 string cvs 1 6 getinterval 
}bind def 
+1

「1000000 add 7 string cvs 1 6 getinterval」 - ニートトリック:-) –

関連する問題