Poststring в PostScript: есть ли более эффективный способ разбора строк? - PullRequest
1 голос
/ 05 июня 2019

Очень старый мой 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 для простоты обработки).

OfКонечно, я мог преобразовать данные графика извне (например, в массив PostSript), но моя идея состояла в том, чтобы добавить некоторый фиксированный магический заголовок PostScript к каждому файлу данных, и он будет визуализировать данные ...

1 Ответ

1 голос
/ 06 июня 2019

Как насчет чего-то большего? readline обрабатывает строки за вас (до объема строки, определенного интерпретатором). token обрабатывает пропуск пробелов и преобразование чисел в действительные или целые числа в зависимости от ситуации.

Обратите также внимание, что логический результат от операторов чтения файлов можно использовать для раннего выхода из цикла, что представляется эффективным.

/buf 65535 string def
/f currentfile def
{
  f buf readline not {exit} if
  { token {exch}{exit} ifelse } loop
  {lineto} stopped {moveto} if
} loop
100 200
300 400
500 600
...