Japhy et al, This worked perfectly for what I want to do.
Thanks to all of you, I am learning at a greater rate than by working alone. Many thanks. At 04:32 PM 6/30/04 -0400, Jeff 'japhy' Pinyan wrote: >On Jun 30, David Arnold said: > >>As I begin reading in lines from the file, I just print them until I hit a >>line that has an opening "\ex" in it. At that point I want to accumulate >>lines in one long string until I hit either "\begin{instructions}" or >>another "\ex". >> >>$line.=<IN> #unless the current line coming in from IN is the start >> #of a new \ex or a \begin{instructions} >> >>The difficulty is now I've read one line too many. I'd like to "put this >>last line back" for the next round of reading while I process the >>accumulated exercise lines. > >I would suggest the following approach: > > # some bigger loop > while (...) { > my $line = ""; > > while (<IN>) { > if (/\\ex|\\begin{instructions}/) { > seek IN, -length, 1; > last; > } > $line .= $_; > } > } > >This uses the seek() function to go to a position in the file. The last >argument, 1, means we're moving relative to where we are now. The middle >argument, -length, is the number of bytes to move. So if the line is 20 >characters long, we're going 20 characters back from where we are now, >essentially to the start of the line. > >-- >Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ >RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ >CPAN ID: PINYAN [Need a programmer? If you like my work, let me know.] ><stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. > > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>