File Postscript文件提前读取

File Postscript文件提前读取,file,postscript,peek,File,Postscript,Peek,我是直接用postscript编程的新手 我正在从一个文件中读取,我正在使用read命令解析符号 我检查的大多数符号长度为2个字符,其中一个为3个字符。我会将长度为3个字符的更改为两个字符,但由于以下原因,这不会有帮助: 这些符号是标准的,所以我不能说。。好的,谢谢你的帮助 其中只有一个角色与其他角色不同! 具有3个字符的符号的前2个字符与另一个符号相同。 如果前两个符号匹配,我需要能够窥视文件中的下一个字符,如果窥视的字符与我想要的3个字符符号不匹配,则不修改读取顺序 例如: 文件文本作为字符

我是直接用postscript编程的新手

我正在从一个文件中读取,我正在使用read命令解析符号

我检查的大多数符号长度为2个字符,其中一个为3个字符。我会将长度为3个字符的更改为两个字符,但由于以下原因,这不会有帮助:

这些符号是标准的,所以我不能说。。好的,谢谢你的帮助 其中只有一个角色与其他角色不同! 具有3个字符的符号的前2个字符与另一个符号相同。 如果前两个符号匹配,我需要能够窥视文件中的下一个字符,如果窥视的字符与我想要的3个字符符号不匹配,则不修改读取顺序

例如: 文件文本作为字符串:AB3;ABB4

在本例中,我将先读A,然后读B,因为这两个字符加在一起是AB,我需要看看读下一个字符是否会产生B。。如果没有,我不想修改我的读取顺序,这样我就可以在代码中正常地提取值。如果有,我现在有了3个字符的符号,可以继续正常提取值


谢谢。

Postscript没有unget函数,因此您不能将一个字节推回到流中,以便稍后再次读取。但是,根据操作系统的支持,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

你的实际问题是什么?如果前两个符号匹配,我如何偷看文件中的下一个字符?如果偷看的字符与我要查找的字符不匹配,我如何不修改读取顺序?我目前正在研究luser droog提供的答案。好的,我假设您不想将文件内容解释为PostScript。在这种情况下,最简单的解决方案是实现您自己的“读取”函数来读取文件。让它读取一个数据字符串,并根据需要从中提供字节。如果要“取消设置”字符,只需将索引向下移动字符串1字节。当然,您需要满足以下情况:字符串耗尽、新的缓冲区读取,并且您仍然希望能够取消设置一个字符。处理这个问题的简单方法是在读取新数据时从旧字符串中复制最后一个字节。