#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