I have that exception sometimes: “can’t convert false into Integer”
This error is non-repetitious.
This exception occur once in a while when I run progam on the same data.
sample code:
for z in 1…lines.length
line = lines[z-1] # this is the line where error occur
end
I don’t use “lines.each do |line|” because I need number of line.
This is the code:
File.open(procsw[j-1],‘r+’) do |file|
lines = file.readlines
for z in 1…lines.length
line = lines[z-1] #can’t convert false into integer
if(line!=nil and line!="") then
line.downcase.gsub(“external name”) do
if(line.index(/’.’/)!=nil) then
line.gsub(/’.’/) {|match|
k = match.rindex("/")
line = “’” + bladePath + match.slice(k…match.length)
“\n”
}
else
lines[z].gsub(/’.*’/) {|match|
k = match.rindex("/")
lines[z] = “’” + bladePath +
match.slice(k…match.length) + “\n”
}
end
end
end
end
file.pos = 0
file.print lines
file.truncate(file.pos)
file.close
end
You should change a lot more. For example, you have nested
invocations of gsub on the same line (albeit sometimes with a #downcase so it’s probably not the same instance).
You also do not need the “file.close” because your block ensures the
file will be closed properly.
Also, I do not see how z can ever be a non Fixnum in your code. Are
you sure this is the code that produces the error? Do you happen to
have multiple threads all of them using a z which is defined outside
the code you show?
In your case I’d rather use #map instead of normal iteration since you
seem to be replacing line contents with something else.
Or wait, there seems to be a off by one error lurking: you use
1…lines.length for iteration, read lines[z-1] but later lines[z].
lines[z] does not exist for z==lines.length. You either need to
change logic or use the three dots range for iteration.