Я создаю программу PostScript, которая должна обрабатывать до десяти миллионов точек данных. У меня проблемы с сохранением этих данных в файле. Вот упрощенная версия того, что у меня есть прямо сейчас:
% (данные и вызовы для обработки)
точка данных 1 точка данных 2 ... точка данных n процесс
точка данных n +1 точка данных n + 2 ... точка данных 2n процесс
...
точка данных (m-1) n + 1 ... точка данных mn процесс
Процесс - это функция, которая берет точки в стеке и выполняет над ними вычисления, в результате чего на странице рисуются различные линии. Поскольку в стеке есть максимальное количество точек, которые могут быть помещены в него, я должен разбить данные на части для обработки. Это нормально, но я бы хотел обработать эти данные дважды двумя разными способами (а позже, возможно, более чем двумя способами). Мой первоначальный план заключался в следующем. У меня было бы 2 функции, process1 и process2, и функция процесса была бы заменена на это:
/process{
mode 1 eq{process1}if
mode 2 eq{process2}if
} def
а затем я бы поместил весь список данных и вызовов функции процесса внутрь некоторой другой функции, называемой "processData", например, такой.
/processData{
datapoint1 ... datapointn process
...
datapointnm process
}def
тогда я смогу выполнить оба типа обработки следующим образом:
/ mode 1 def processData
/ 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
Однако это тоже не работает, потому что массивы также имеют максимальную длину. Затем я попытался закодировать данные как символы и поместить все в строку, но строки также имеют максимальную длину. Я рассматриваю возможность использования массива строк, но подозреваю, что есть способ лучше.
Как это может быть сделано? Спасибо.