Пропускает некоторые части файла во время чтения

#string #file #lua

Вопрос:

Итак, я создаю простую программу на lua, которая просит вас написать слово, содержащее что-то вроде «ck» или «bv», очевидно, что слова должны быть в словаре, поэтому у меня есть файл с более чем 50 000 словами, которые есть в словаре, дело в том, что когда я набираю слова, которые есть в файле, в нем говорится, что я теряю, я ставлю печать(строку) для отладки, чтобы я мог видеть, что происходит, я заметил, что оно не печатает каждое слово.

Пример:

введите описание изображения здесь

Текстовый файл

введите описание изображения здесь

Это код для чтения файла:

 local words_file = io.open("words.txt", "r")
local words = {}
local contains = {"br", "gg", "in", "et", "ck", "q", "it", "el", "st", "es", "be"}
local input

math.randomseed(os.time())


for line in words_file:lines() do
  words[line] = words_file:read("*l")
  print(line)
end
print("Loaded!")
 

Это код для игры:

 while true do
    local contain = contains[math.random(#contains)]
    print("Write a word that contains "" .. contain ..""")
    input = io.read()
  if not (string.find(input, contain) and words[input:lower()]) then
    print("lol u bad")
    break
  end
end
 

Комментарии:

1. Пожалуйста, предпочитайте текстовую презентацию изображениям, показывающим отрисованный текст.

Ответ №1:

Вы не должны вызывать words_file:read("*l") в своем цикле, вы также заставляете итератор перемещаться по файлу, что приводит к пропуску строк.

Поведение по умолчанию для file:lines l также должно использоваться.

Возвращает функцию-итератор, которая при каждом вызове считывает файл в соответствии с заданными форматами. Если формат не указан, по умолчанию используется «l».

У вас уже есть значение из строки в переменной цикла line .

вам просто нужно сделать

 for line in words_file:lines() do
  words[line] = true
  print(line)
end