2011-09-25 14 views
11

पोस्टस्क्रिप्ट में, सीवीएस * ऑपरेटर * एक संख्या को एक स्ट्रिंग में कनवर्ट करने के लिए कहा जाता है। मुझे इसका उपयोग कैसे करना चाहिए? मैंने कोशिश की:पोस्टस्क्रिप्ट: एक पूर्णांक को स्ट्रिंग में कैसे परिवर्तित करें?

100 100 moveto 
3.14159 cvs show 

या

100 100 moveto 
3.14159 cvs string show 

लेकिन यह काम नहीं किया।

कोई मदद?

उत्तर

10

3.14159 20 string cvs show आज़माएं।

string आकार की आवश्यकता है और ढेर पर बनाई गई स्ट्रिंग को छोड़ देता है। cvs को परिवर्तित मूल्य को संग्रहीत करने के लिए एक मान और स्ट्रिंग की आवश्यकता होती है।

आप स्ट्रिंग रूपांतरण की बहुत सारी कर रहे हैं, यह एक स्ट्रिंग बना सकते हैं और प्रत्येक रूपांतरण में यह पुन: उपयोग करने और अधिक कुशल हो सकता है:

/s 20 string def 
3.14159 s cvs show 
11

एक आम मुहावरा टेम्पलेट के रूप में एक शाब्दिक स्ट्रिंग का उपयोग करना है।

1.42857 (  ) cvs show 

आप एक बड़ी स्ट्रिंग के विभिन्न सबस्ट्रिंग के साथ सीवी प्रस्तुत करके स्वरूपित आउटपुट भी कर सकते हैं।

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

लेकिन Ghostscript Style Guide इसे मना करता है। और यह हमारे पास एकमात्र प्रकाशित पोस्टस्क्रिप्ट स्टाइल गाइड है जो हमारे पास है। (A discussion about this comp.lang.postscript में।) तो एक सामान्य सिफारिश है जब आपको इसकी आवश्यकता हो तो ताजा स्ट्रिंग आवंटित करें और कचरा कलेक्टर इसे बनाए रखने दें।

4.28571 7 string cvs show 

एक अंतिम उपाय के रूप में, सही मायने में आलसी हैकर =string अपहरण जाएगा, निर्मित 128-बाइट आउटपुट संख्या (बेशक, का उपयोग कर, हमारे दोस्त cvs) को = और == द्वारा इस्तेमाल किया बफर।

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 से बैग के लिए एक और चाल। शून्य-गद्देदार पूर्णांक प्राप्त करने का यह एक आसान तरीका है।

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

"1000000 7 स्ट्रिंग सीवी 1 6 getinterval जोड़ें" - साफ चाल :-) –