Article View: comp.lang.postscript
Article #7269Re: string concatenation
From: Glenn Reid
Date: Mon, 04 Jul 1988 02:37
Date: Mon, 04 Jul 1988 02:37
60 lines
2693 bytes
2693 bytes
>I'm learning PS slowly and have a couple questions. I have all three
>Adobe books and have tried to infer one thing in particular to no avail.
>How do you concatenate several strings together into one in PS? A small
>example would be worth a thousand words. I have tried "copy" and "put"
>but my programming environment is becoming a real source of frustration.
Jerry,
There is no inherent mechanism for string concatenation in the
PostScript language. Basically you have to allocate a new string
and copy the existing ones into it. You might also pause to consider
carefully why you want to concatenate the strings: you might not need
to (for example, if you are going to print them sequentially, all you
have to do is call "show" for each string--the current point is left at
the right spot after each show, and the next string is printed right
where you would expect).
Anyway, here is a procedure that should help (be aware that it uses
memory each time it is called, equal to the sum of the lengths of the
strings you are concatenating):
%!PS-Adobe-2.0
%%Title: stringcat.ps
%%EndComments
/cat { %def
% concatenates two strings and leaves the result on the stack
dup length 2 index length add string% new string
dup 4 -1 roll % pull (one) to top
dup length 3 1 roll % save <length> for later
0 exch putinterval % () 0 (one) putinterval
1 index exch % keep one last copy of ()
4 -1 roll putinterval % () <length> ( two) putinterval
% leaves last copy of () on stack
} bind def
/scratch 3 dict def
/cat2 { %def
% uses variables instead of the stack; take your pick
scratch begin
/str2 exch def /str1 exch def % save from stack
/resultstr % compute length, allocate string
str1 length
str2 length add string
def
resultstr 0 str1 putinterval % putinterval str1 at 0
resultstr str1 length str2
putinterval % putinterval str2 at length(str1)
resultstr % leave result string on stack
end
} bind def
%%EndProlog
(one) ( two) cat ==
(first ) (second) cat2 dup ==
%%Trailer
% I hope this helps.
%
% Glenn Reid
% Adobe Systems
Technical Details
Message-ID:
<4059@adobe.COM>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ames!decwrl!adobe!ondine!greidReferences:
<2564@ihuxy.ATT.COM>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ames!decwrl!adobe!ondine!greid From: greid@ondine.COM (Glenn Reid) Newsgroups: comp.lang.postscript Subject: Re: string concatenation Summary: dup length string putinterval etc Keywords: PostScript strings Message-ID: <4059@adobe.COM> Date: 4 Jul 88 02:37:37 GMT References: <2564@ihuxy.ATT.COM> Sender: news@adobe.COM Reply-To: greid@ondine.UUCP (Glenn Reid) Organization: Adobe Systems Incorporated, Mountain View Lines: 60