[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

strange, non-repetitious error

Pan Kracy

4/7/2008 10:36:00 AM

Hello

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

Is it a ruby implementation problem?

Greetings
--
Posted via http://www.ruby-....

7 Answers

Robert Klemme

4/7/2008 11:25:00 AM

0

2008/4/7, Pan Kracy <flisak_kf@o2.pl>:
> Hello
>
> 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
>
> Is it a ruby implementation problem?

Most likely not. We can't say without seeing more code. What type of
object is "lines"?

Why don't you just do

lines.each do |line|
end

?

Kind regards

robert

--
use.inject do |as, often| as.you_can - without end

Pan Kracy

4/7/2008 11:33:00 AM

0

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

--
Posted via http://www.ruby-....

Stefano Crocco

4/7/2008 11:41:00 AM

0

On Monday 07 April 2008, Pan Kracy wrote:
> I don't use "lines.each do |line|" because I need number of line.

Do you know about Array#each_index and Array#each_with_index?:

['a', 'b', 'c'].each_index{|i| puts i}

Output:
0
1
2

['a', 'b', 'c'].each_with_index{|obj, i| puts "i: #{i}, obj: #{obj}"}

Output:
i: 0, obj: a
i: 1, obj: b
i: 2, obj: c

Stefano

Rick DeNatale

4/7/2008 11:43:00 AM

0

On Mon, Apr 7, 2008 at 7:33 AM, Pan Kracy <flisak_kf@o2.pl> wrote:
> I don't use "lines.each do |line|" because I need number of line.

lines.each_with_index do | line, z|
...

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...

Pan Kracy

4/7/2008 11:54:00 AM

0

I will try with
lines.each_with_index do | line, z|

Thank you all for replies.
Greetings
--
Posted via http://www.ruby-....

Robert Klemme

4/7/2008 12:25:00 PM

0

2008/4/7, Pan Kracy <flisak_kf@o2.pl>:
> I will try with
>
> lines.each_with_index do | line, z|

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.

Kind regards

robert

--
use.inject do |as, often| as.you_can - without end

Jano Svitok

4/7/2008 12:32:00 PM

0

On Mon, Apr 7, 2008 at 2:25 PM, Robert Klemme
<shortcutter@googlemail.com> wrote:
> 2008/4/7, Pan Kracy <flisak_kf@o2.pl>:
> You should change a lot more. For example, you have nested
...

I agree with Robert. Maybe if you describe what you are trying to
achieve, somebody would help with a cleaner solution.

J.