Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
ellab
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 3
#1

Зависает string.find - Lua

20.12.2016, 21:49. Просмотров 562. Ответов 5
Метки нет (Все метки)

Всем привет!
Прошу помощи разобраться с данным кодом:

C
1
2
3
4
local str="ON;ON;ON;ON;ON;ON;ON;OFF;ON;ON;ON;ON;ON;OFF;ON;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;OFF;OFF;ON;OFF;OFF;OFF;OFF;OFF;temp:NA;282;268"
local s,e,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37 = string.find(str,"(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*)",1)
 
print (p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37)
код содержит 38 захватов в строке, значения которой разделены ";" и не выполняется (зависает интерпретатор). Аналогичный код, но с 20 захватами выполняется. А далее добавляя количество захватов по одному время выполнения скрипта лавинообразно возрастает.

Подскажите в чем может быть дело!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2016, 21:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зависает string.find (Lua):

find() from string! - C++
Ищу в строке вхождения подстроки, запоминаю номер. Если нашел, то удаляю подстроку и вставляю соответствующий ей ключ с той же позиции. ...

Find из string.h - C++
Расскажите про функцию find из библиотеки строк. Не получается использовать, и какое значение она выдает, если в строке подстроки не...

String::find работает некорректно - C++
У меня есть такая подзадача: есть строка тегов(латинские буквы в треугольных строках, если тег начинается с /, то это закрывающий), нужно...

Метод find класса string - C++
У меня задание: нужно написать программу, которая находит текст, в файле, показывает номер строки и саму строку, в которой текст находится....

std::string::find и кириллица - C++
есть простенький код #include <iostream> // std::cout #include <string> // std::string int main () { ...

Метод BindingSource.Find(string, object) не поддерживается - C#
Здравствуйте! Есть база и сущность на основе базы. Есть BindingSource, источником для которого есть запрос к этой сущности. Хочу в...

5
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
21.12.2016, 15:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
а зачем вы над ним издеваетесь?
сделайте
Код
local ps={}
for p in str:gmatch('([^;]+)') do
  table.insert(ps,p)
end
print(unpack(ps))
или замените '.' на '[^;]'
2
ellab
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 3
21.12.2016, 20:17  [ТС] #3
Спасибо Вам большое, подходит!
Но все же: почему зависает скрипт? Хотелось бы понимать для общего развития.
Это хорошо работало с меньшим количеством захватов (меньше была строка ответа в другом устройстве).
Буфер?
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
21.12.2016, 23:38 #4
Потому что слишком большой перебор
'*' заставляет Lua начинать перебор с максимально длинной строки.
Можно было использовать '-' для коротких строк, или не давать захватывать ';'
0
ellab
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 3
21.12.2016, 23:43  [ТС] #5
Ok. Понял Вас. Еще раз спасибо!
0
Catstail
Модератор
22830 / 11196 / 1812
Регистрация: 12.02.2012
Сообщений: 18,436
22.12.2016, 07:59 #6
Даже не зная особенностей Lua, можно сразу сказать: код с такими длинными строками не может быть правильным. На любом языке. Это противоречит сути программирования. И нет смысла искать причину, почему он не работает. Он уродлив - это главное.
1
22.12.2016, 07:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2016, 07:59
Привет! Вот еще темы с ответами:

Как использовать функции string::find или функция strstr(str1 ,str2) - C++
как использовать функции string::find или функция strstr(str1 ,str2) Добавлено через 3 минуты вернее какой у них синтаксис привдети...

Парсинг XML find(). Как заставить find() выбирать элементы только на первом уровне? - jQuery
Пытаюсь распарсить XML-ответ от сервера. <reply> <sector> <users> <item> <sex>male</sex> <name>Vasya</name> ...

отличие find -name от find -path - Ubuntu Linux
Собственно, вопрос в названии темы. Подскажите, пожалуйста. Читаю man, но понять никак не могу.

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population - C#
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru