2011-09-25 1 views
11

Nel poscritto, il cvs * l'operatore * si dice che converta un numero in una stringa. Come dovrei usarlo? ho provato:Postscript: come convertire un intero in stringa?

100 100 moveto 
3.14159 cvs show 

o

100 100 moveto 
3.14159 cvs string show 

, ma non ha funzionato.

Qualsiasi aiuto?

risposta

10

Prova 3.14159 20 string cvs show.

string ha bisogno di una dimensione e lascia la stringa creata nello stack. cvs richiede un valore e una stringa per memorizzare il valore convertito.

Se stai facendo un sacco di conversioni di stringhe, può essere più efficace per creare una stringa e riutilizzarla in ogni conversione:

/s 20 string def 
3.14159 s cvs show 
11

un idioma comune è quello di utilizzare una stringa letterale come modello.

1.42857 (  ) cvs show 

Si può anche fare un output formattato con la presentazione di CVS con varie sottostringhe di una stringa più grande.

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

Ma il Ghostscript Style Guide vieta questo. Ed è praticamente l'unica guida in stile Postscript pubblicata che abbiamo. (A discussion about this in comp.lang.postscript). Quindi una raccomandazione comune è quella di allocare una nuova stringa quando ne hai bisogno e lasciare che il garbage collector guadagni il suo mantenimento.

4.28571 7 string cvs show 

Come ultima risorsa, l'hacker veramente pigri sarà dirottare =string, il built-in buffer di 128 byte usati per = e == a numeri di uscita (utilizzando, ovviamente, il nostro amico cvs).

5.71428 =string cvs show 

E se vi piace che uno, si può combinare con s' = altro trucco: i nomi immediatamente valutati.

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

Questo sistema elimina il microsecondo in più e rende molto più difficile l'ispezione interattiva del codice. Chiamando == su questa procedura non rivelerà il fatto che si sta utilizzando =string; sembra proprio come qualsiasi altra stringa.


Un altro trucco per la borsa, da a post by Helge Blischke in comp.lang.postscript. Questo è un modo semplice per ottenere un numero intero senza riempimento.

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

"1000000 aggiungi 7 string cvs 1 6 getinterval" - Trucchetto accurato :-) –