포스트 스크립트의 파일 IO에 대한 몇 가지 트릭과 바로 가기가 있으며, 포스트 스크립트 책의 소개 섹션에서 자주 언급되지 않습니다. 그들 중 가장 잘 보관 된 비밀은 '토큰'연산자입니다. 해석자 자신의 스캐너를 빌려 (네임 타입 객체 생성), 숫자 (integerype 또는 realtype 객체 인 생성) 또는 이들의 배열을 읽을 수 있습니다 (단, 실행 가능 배열 표기법을 사용하는 경우에만 가능). 중괄호, 그렇지 않으면 그냥 왼쪽 된 대괄호를 나타내는 marktype 개체를 얻을. 간단한 예를 들어
, 나는 종종 포스트 스크립트 프로그램에서 확장 된 해설 부분을 포함하는이 한 줄을 사용
%!
{ currentfile token pop /END-COMMENT eq {exit} if } loop
Each word here is read from the current file and converted
into a name object and compared to "/END-COMMENT".
It can have but does not need a preceeding slash.
This program produces an image of a snowman in a blizzard,
suitable for use as stationary.
END-COMMENT
showpage
편집 : 나는 지금 정말 끔찍한 대답 실현 .. . 지금까지.
(Some
multi-line
text)
pop
그래서, 진짜이 시간 :
내 위의 예제에 불과하다.
시작하려면 loop
이 필요합니다.
{
} loop
이 루프 내부에는 몇 가지 데이터가 있습니다.
/src (datafile) (r) file def
{
src readline
} loop
관찰 한대로 파일 읽기 연산자는 모두 스택 맨 위에 부울을 반환합니다. 완전한!
/src (datafile) (r) file def
{
src readline {
}{
exit
} ifelse
} loop
그래서 뭔가를하고 반복 계속됩니다 부울 사실, 그러나 (노 더 많은 데이터) 부울 거짓은 루프가 종료됩니다. 그러나 readline
에는 데이터를 넣을 문자열이 필요합니다. 그리고 거짓 경우에도 문자열을 반환합니다.
/src (datafile) (r) file def
/str 80 string def
{
src str readline {
processline
}{
pop exit
} ifelse
} loop
이제 파일의 데이터 (최대 80 자)가 포함 된 문자열이 있습니다. Postscript 구문과 거의 비슷하다면 루프 내에서 token
을 사용할 수 있습니다 (첫 번째 예제와 마찬가지로 파일에서 각 단어를 읽고 실행 파일 이름으로 변환 한 다음 리터럴 이름과 비교 함). 이름이 일치하면 exit 루프). 또는 get
루프 (또는 forall
루프)를 사용하여 각 바이트를 정수로 추출 할 수 있습니다. 하지만 멋진 일은 search
입니다.
이 절차에서는 문자열에서 공백으로 구분 된 단어를 검색하여 각 단어를 자체 줄에 stdout으로 인쇄합니다.
/processline { % (line)
() { % (line) ()
search { % (post) () (pre)
=
}{ % (no-match)
=
exit
} ifelse
} loop
} def
다른 단어처럼 마지막 단어에 동일한 작업을 수행하려는 경우 여기에서 사례를 복제하는 것이 일반적으로 더 쉽습니다.수 최상위 문자열을 처리하는 까다로운 물건을 수행하고 다음 부울 테스트; 번거롭게 할 가치는 없습니다. 멋진 점은 search
이 결과를 반환하는 편리한 순서입니다. 그것은 당신이 그것으로 작업 할 수 있도록 끈의 시작 부분을 맨 위에 놓습니다. 그런 다음 "일치"를 제공합니다 (처음에는 "검색"과 동일 함). 나머지는 나머지 문자열입니다. 그리고 그들은 루프의 다음 라운드를 위해 이미 올바른 순서로되어 있습니다.
그래서 외부 파일에서 추출한 공백으로 구분 된 단어로 무엇을하고 싶습니까?
숫자를 나타내는 경우 cvi
또는 cvr
수 있으며 산술 않습니다. 영숫자 인 경우 print
또는 show
수 있습니다. 또는 cvn
을 사용하고 원자 기호로 사용하십시오.
내가 waybackmachine 링크를 찾을 수있는 시간을내어 줄 수 있다면 나는 그것을 +2로 만들 것입니다. 감사. – dmckee
흠, 나는 지금이 포스트 스크립트에 2 일간 머물 렀지 만, "포스트 스크립트에서 생각하는"누군가는 미쳐야한다고 생각합니다. 그래도 위대한 참조. –