Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
ellab
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 6
#1

Зависает string.find

20.12.2016, 21:49. Просмотров 1096. Ответов 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
Ответы с готовыми решениями:

Lua Socket TCP/IP скрипт зависает
Использую чпу для резки лазером. Язык расширения у неё Lua. Соединение по...

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

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

std::string::find и кириллица
есть простенький код #include <iostream> // std::cout #include...

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

5
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
21.12.2016, 15:12 #2
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

а зачем вы над ним издеваетесь?
сделайте
Код
local ps={}
for p in str:gmatch('([^;]+)') do
  table.insert(ps,p)
end
print(unpack(ps))
или замените '.' на '[^;]'
2
ellab
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 6
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
Сообщений: 6
21.12.2016, 23:43  [ТС] #5
Ok. Понял Вас. Еще раз спасибо!
0
Catstail
Модератор
23548 / 11658 / 2039
Регистрация: 12.02.2012
Сообщений: 19,015
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 работает некорректно
У меня есть такая подзадача: есть строка тегов(латинские буквы в треугольных...

Метод BindingSource.Find(string, object) не поддерживается
Здравствуйте! Есть база и сущность на основе базы. Есть BindingSource,...

Как работает функция std::string::find(...)
здравствуйте есть допустим вот такой код #include <iostream> #include...


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

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

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