2013-03-13 41 views
2

我想使用postscript獲得StandardEncoding向量(PLRM的附錄E.6中有一個圖形版本,但沒有文本)。我正在尋找類似於[/ A/B/C/D]的東西,但實際上我可以用正則表達式來將編碼向量中的位置與字符命令關聯起來。如何在ghostscript中打印一個向量到標準輸出

我已經試過

(%stdout) 
(w) 
file 
/StandardEncoding 
writestring 

但它(顯然)不工作的/ StandardEncoding不是字符串。我如何打印這樣的向量到標準輸出?

回答

7

簡單的。

StandardEncoding == 

或者帶有索引。十進制:

0 StandardEncoding { exch dup =only(:)print 1 add exch == } forall pop 

八:

0 StandardEncoding { exch dup 8 3 string cvrs =only(:)print 1 add exch == } forall pop 

十六進制:

0 StandardEncoding { exch dup 16 2 string cvrs =only(:)print 1 add exch == } forall pop 

此外,你應該知道,/StandardEncoding文字名(因爲/的),因此名稱本身坐在堆棧上。如果您已經完成了下一步並轉換爲字符串,則只會打印單詞「StandardEncoding」。因此,要自動加載(並可能執行)與名稱關聯的值,請刪除斜槓(/),使其名稱爲可執行文件。字StandardEncoding(沒有斜槓!)成爲矢量。斜線的工作方式與Lisp-family語言中的quote非常相似。

爲了說明,這裏有更多的方法來打印和迭代數組。

StandardEncoding { 
    (%stdout)(w)file exch 80 string cvs writestring 
    (%stdout)(w)file (\n) writestring 
} forall 

StandardEncoding 
0 1 2 index length 1 sub { % Arr i 
    2 copy get 80 string cvs print % Arr i 
    (\n) print % Arr i 
    pop % Arr 
} for 

[ StandardEncoding 0 { 
    { 
     2 copy get ==only 
     ()= 
     1 add 
    } loop 
} stopped cleartomark 

這最後一個使用一個無限循環並捕獲信號通知時get嘗試讀取不存在的單元的rangecheck錯誤。它會在堆棧中留下5個值(StandardEncoding 256 StandardEncoding 256 true),您可以用cleartomark(如圖所示)或簡單地pop pop pop pop pop(或5{pop}repeat)丟棄這些值。

編輯:進一步玩最後一個例子。這將錯誤陷印隔離到預計會拋出錯誤的操作符。隔離預期的錯誤可以讓任何意外的錯誤打印出正常的診斷結果。

[ StandardEncoding 0 { 
    2 copy 
    { get } stopped { exit } if 
    ==only()= 
    1 add 
} loop cleartomark 
+0

謝謝,第一個很簡單,完美地完成了這項工作 – user1043479 2013-03-14 07:11:38

1

你可以使用 「==」 和 「FORALL」:

([) = 
StandardEncoding { == } forall 
(]) = 
+0

+1是正確的。 – 2013-03-19 23:10:09

相關問題