【发布时间】:2018-06-08 09:17:10
【问题描述】:
我正在创建一个 postscript 程序,它需要能够处理多达一千万个数据点。我无法将此数据存储在文件中。这是我现在所拥有的简化版本:
%(数据和进程调用)
datapoint1 datapoint2 ... datapointn 进程
数据点n+1 数据点n+2 ... 数据点2n 进程
...
数据点(m-1)n+1 ...数据点mn进程
Process 是一个函数,它获取堆栈上的点并对其进行计算,从而在页面上绘制各种线条。因为堆栈有最大数量的点可以放在上面,所以我必须将数据分成块进行处理。这很好,但是我想以 2 种不同的方式处理此数据两次(稍后,可能超过 2 种方式)。我最初的计划是做以下事情。我将有 2 个函数,process1 和 process2,并且 process 函数将被替换为:
/process{
mode 1 eq{process1}if
mode 2 eq{process2}if
} def
然后我会将整个数据列表和对流程函数的调用放入另一个名为“processData”的函数中,例如这样。
/processData{
datapoint1 ... datapointn process
...
datapointnm process
}def
那么我就可以像这样进行这两种类型的处理:
/mode 1 def 进程数据
/mode 2 def processData
这样做的好处是我不需要再次写出所有数据,这会占用太多空间,尤其是当我需要执行多个进程(而不仅仅是 2 个)时。然而,这不起作用,因为就像堆栈一样,函数中可以包含的东西的数量有一个最大大小。
我的第二个计划是将数据放入一个数组中,然后像这样循环两次数据:
/array [datapoint1 datapoin2 ... datapointmn] def
1 1 n m mul {array exch get process1} for
1 1 n m mul {array exch get process2} for
但是这也不起作用,因为数组也有最大长度。然后我尝试将数据编码为字符并将其全部放在一个字符串中,但字符串也有一个最大长度。我正在考虑使用字符串数组,但我怀疑有更好的方法。
如何做到这一点?谢谢。
【问题讨论】:
-
听起来您真的只是想要将数据存储在文件中,然后让 PostScript 程序从那里读取它。我看不出有任何理由将数据存储为程序的一部分。您可以使用“令牌”运算符从文件中读取 PostScript 对象,因此您可以将数据存储为(我认为)数字。
标签: postscript