Rachelle
Rachelle

Reputation: 267

Not completed file read

I'm trying to debug what went wrong in my code. My file.txt contains 1763 lines but when I run it, it always ends up not completed. Always stops somewhere at 1680 and up (printed by the row in my code); the thing is it stops at different line every time I run it, so I don't think the problem's with my text file.

row = 0
for line in io.lines("file.txt") do 
  row = row+1
  local new_row1 = {}
  for n in line:gmatch'%S+' do
     table.insert(new_row1, tonumber(n))
  end
  if #new_row1 > 0 then
     table.insert(input, new_row1) 
  end
  print(row)
end

Is there something wrong in my code?

Upvotes: 1

Views: 89

Answers (1)

greatwolf
greatwolf

Reputation: 20838

It looks like in your code, you opened a file handle to "file.txt" at the beginning of your script and it remains open till the end where you close the file. During that time, you attempt to reopen "file.txt" again in your loop which is causing the strange behavior you're seeing.

When I moved your file open and close scopes to the middle section after first loop but before the last outer loop, that fixes the issue:

file = assert(io.open("file.txt", "w"))
   for i = 1, 1000 do
      j = math.random(i, row-one)
      u[i], u[j] = u[j], u[i]
      for k = 1, 11 do
         file:write(input2[u[i]][k], " ")
      end
      file:write"\n"
   end
   num = (row-one)+1
   for i = 1, one do
     for k=1, 11 do
       file:write(input2[num][k], " ")    --writes to the file all the rows starting from where '1' in column11 was seen
     end
     file:write("\n")
     num = num + 1
   end
file:close()
-----------------------------------Access file.txt.--------------------------
-- ...

This gives the expected output:

Done    1762    1762
--------------------------

Upvotes: 2

Related Questions