【发布时间】:2019-06-11 01:11:42
【问题描述】:
我的一个非常古老的用于解析输入行的 PostScript 代码如下所示:
/buff 1 string def % check for line wrap every character
/EOLchar (\n) def % line feed
{ %loop
currentfile buff readstring exch
dup EOLchar eq
{ %ifelse
%...
}
{ %else
%...
} ifelse
not { %if readstring found EOF
exit % end of file
} if
} loop
是否有更有效的方法来读取整行以进行进一步处理?
我想将数据嵌入到文件中,每一行都描述一个线段。
每行由多个数字字段组成,由 TAB 字符分隔(因此我将这些行拆分为字段,并将字段字符串转换为 int 或 real 以便于处理)。
当然,我可以在外部转换绘图数据(例如转换为 PostSript 数组),但我的想法是为每个数据文件添加一些固定的魔法 PostScript 标头,它会渲染数据...
【问题讨论】:
-
老实说可能会更好,因为没有图形问题。尽管您没有定义为什么要首先解析我。最好是通过一个列表。
-
同时我尝试了这种方法:一次读取一个大缓冲区中的所有内容(假设文件不是很大),然后使用
search构建一个行数组。 -
您可以使用 readline 代替 readstring,假设您的行以 \n、\r 或两者结尾。这样您就不必逐字节读取,并检查每个字符是否有 EOL,这样会更快。取决于“...”内容的两个可能问题;首先,EOL 未存储在字符串中,其次,如果字符串不足以从文件中读取整行,则会出现范围检查错误。 Adobe PostScript 解释器中的字符串限制为 64Kb,因此您应该将其视为您可以定义的最大字符串..
-
还有 SubFileDecode 过滤器,可能是合适的,但这取决于您在读取数据后对数据进行的处理。
标签: algorithm performance postscript