From ... From: Erik Naggum Subject: Re: how to efficiently concatenate strings? Date: 1998/07/03 Message-ID: <3108455196865392@naggum.no>#1/1 X-Deja-AN: 368378140 References: mail-copies-to: never Organization: Naggum Software; +47 8800 8879; http://www.naggum.no Newsgroups: comp.lang.lisp * kp gores | in a loop reading a file char-by-char into current-char i do : consider reading the whole file into a string with READ-SEQUENCE, then extract strings from it with SUBSEQ or with displaced arrays if they are longish and would only create garbage. | to collect the characters into a string current-token. well, one option is to collect the characters into a list, and finally (apply #'concatenate 'string ), but that may seem wasteful to many. another option is to create an adjustable string with a fill pointer (use MAKE-ARRAY) and use VECTOR-PUSH-EXTEND to deposit characters into the string as you read them. for extra optimization, you can reuse the buffer and reset the fill pointer after you have copied out and returned the string you're interested in. incidentally, I think a buffering protocol would be very useful in Common Lisp streams, such that one could put a "mark" in a buffer and extract the string from the mark to the current read point. this would have saved me a lot of hassle in copying strings from input files, considering that a significant cost of some file read operations are in the copying of the characters, and optimizing for that cost can lead to weird code. #:Erik -- http://www.naggum.no/spam.html is about my spam protection scheme and how to guarantee that you reach me. in brief: if you reply to a news article of mine, be sure to include an In-Reply-To or References header with the message-ID of that message in it. otherwise, you need to read that page.