2014-02-28 21 views
1

我是直接在postscript編程的新手。Postscript文件閱讀提前

我正在從一個文件中讀取數據,並使用read命令來解析符號。

我正在檢查的大多數符號的長度是2個字符,一個是3個字符的長度。我想改變一個長度爲3個字符到兩個字符,但不會幫助,原因如下:

  1. 的符號是一個標準的,所以我不能說..好,感謝你使 只是其中一個3個字符不像其他所有!
  2. 具有3個字符的符號的前2個字符與另一個符號相同。

如果前兩個符號匹配,我需要能夠「偷看」文件中的下一個字符,而不是修改讀取順序,如果偷看的字符與我想要的不匹配3個字符符號。

示例: 以字符串形式顯示文本文本:「AB3; ABB4;」

在這種情況下,我會閱讀A,然後B,因爲這兩個字符一起是「AB」,我需要看看讀下一個字符是否產生B ..如果不是,我不想修改我的閱讀命令,所以我可以在代碼中正常進行以提取值。如果是這樣,我現在有我的3個字符符號,並可以繼續正常提取值。

謝謝。

+0

你是什麼實際問題? – KenS

+0

如果前兩個符號匹配,我該如何「窺視」文件中的下一個字符,並且如果偷看的字符與我所尋找的字符不匹配,則不會修改讀取順序?我目前正在研究由luser droog提供的答案。 –

+0

好吧,我假設你不想將文件內容解釋爲PostScript。在這種情況下,最簡單的解決方案是實現自己的「讀取」功能從文件讀取。讓它根據需要讀取一串數據並從中提供字節。如果你想'取消'一個字符,只需將索引移回字符串1字節。當然,你會想要滿足字符串耗盡,讀取新緩衝區的情況,並且你仍然希望能夠取消一個字符。處理這個問題的簡單方法是在讀取新數據時複製舊字符串中的最後一個字節。 – KenS

回答

0

Postscript沒有unget函數,所以您不能將字節推回到流中以便稍後再次讀取。但是,根據操作系統支持,Level 2 Postscript允許您重新定位文件。所以,你可以實現你peek功能是這樣的:

% file peek int true 
%    false 
/peek { 
    dup fileposition exch dup % pos file file 
    read { %true: pos file int 
     3 1 roll exch setfileposition true 
    }{ %false: pos file 
     pop pop false 
    } ifelse 
} def