Why am I getting this string error?

P

Peter Bailey

Can someone explain to me why I'm getting the error below for this part
of a script? It doesn't seem to like line 24, the scan line, but, I've
got this same code being used for other needs and it doesn't complain at
all there.

Thanks,
Peter


...
20 Dir.glob("*.ps").each do |psfile|
21 $filetime = File.ctime(psfile)
22 $filetime = $filetime.to_s.gsub!(/ -.*$/, "")
23 file_contents = File.read(psfile)
24 file_contents.scan(/\%\%Pages: (\d{1,5})[ ]+\n/) do
25 totalpages = $1
26 if (totalpages.to_i % 2) !=0 then
27 totalpages = totalpages.to_i + 1
28 file_contents << "\%\%Blank page for Asura.\n\%\%Page:
29 #{totalpages.to_i}\nshowpage\n"
30 File.open(psfile, "w") { |f| f.print file_contents }
31 FileUtils.touch(psfile)
32 end
...

getting this error:
rubyw indexpagecounts_6x9.rbw
indexpagecounts_6x9.rbw:24:in `scan': string modified (RuntimeError)
from indexpagecounts_6x9.rbw:24
from indexpagecounts_6x9.rbw:20:in `each'
from indexpagecounts_6x9.rbw:20
 
V

Vincent Fourmond

Peter said:
Can someone explain to me why I'm getting the error below for this part
of a script? It doesn't seem to like line 24, the scan line, but, I've
got this same code being used for other needs and it doesn't complain at
all there.
23 file_contents = File.read(psfile)
24 file_contents.scan(/\%\%Pages: (\d{1,5})[ ]+\n/) do
28 file_contents << "\%\%Blank page for Asura.\n\%\%Page:
32 end
...

getting this error:
rubyw indexpagecounts_6x9.rbw
indexpagecounts_6x9.rbw:24:in `scan': string modified (RuntimeError)
from indexpagecounts_6x9.rbw:24
from indexpagecounts_6x9.rbw:20:in `each'
from indexpagecounts_6x9.rbw:20
Exit code: 1

You're modifying file_contents during scan, so scan gets confused.
from what I see, you'd better use gsub! with a block, since, if I
understood your point, you are basically inserting text where you detect
something.

Vince
 
P

Peter Bailey

...
20 Dir.glob("*.ps").each do |psfile|
21 $filetime = File.ctime(psfile)
22 $filetime = $filetime.to_s.gsub!(/ -.*$/, "")
23 file_contents = File.read(psfile)
24 file_contents.scan(/\%\%Pages: (\d{1,5})[ ]+\n/) do
25 totalpages = $1
26 if (totalpages.to_i % 2) !=0 then
27 totalpages = totalpages.to_i + 1
28 file_contents. << "\%\%Blank page for Asura.\n\%\%Page:
29 #{totalpages.to_i}\nshowpage\n"
30 File.open(psfile, "w") { |f| f.print file_contents }
31 FileUtils.touch(psfile)
32 end
...

You're modifying file_contents during scan, so scan gets confused.
from what I see, you'd better use gsub! with a block, since, if I
understood your point, you are basically inserting text where you detect
something.

Vince

Thanks, Vince. I see what you mean, and, I did change it to use a gsub!.
I've always thought of gsub as a changer for little things, not huge
files like this, but, it works fine. Thanks again.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,058
Latest member
QQXCharlot

Latest Threads

Top