С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 06.07.2020
Сообщений: 12

Паттерн

13.04.2022, 19:46. Показов 1411. Ответов 9
Метки lua (Все метки)

Студворк — интернет-сервис помощи студентам
Привет

Есть строка
[data][crc]
Пытаюсь достать из нее
data
crc
вот так
Lua
1
2
3
for word in data:gmatch("%[(%a+)%]") do
   print(word) 
end
Выводит crc

Так же есть строка
text_1 text_2
Нужно просто разделить по символу %s (пробел)

Заранее спасибо.

Добавлено через 13 минут
По первому вопросу отбой... у меня был символ "_" в искомой строке

Добавлено через 6 минут
И все таки, а если в DATA будут всевозможные символы _ ; ~!@#$%^&*() то паттерн не сработает. Как быть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2022, 19:46
Ответы с готовыми решениями:

Паттерн матчинг и поля с метками
Нигде не нашёл как сделать это Вот пример моих попыток это сделать data Tree a = Empty |Tree {node :: a, left :: Tree a,...

Паттерн матчинг, как выкрутиться
Добрый день Есть у меня вот такой код в проекте: --доступные команды станка data Command = G0 Params | G1 Params | F...

Результат функции, как паттерн в регулярном выражении
Добрый! есть некий результат вывода функции &some_sub. вот так не получается. my @array = grep /&some_sub/, LIST; а вот...

9
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.04.2022, 19:58
Лучший ответ Сообщение было отмечено maddogmaycry как решение

Решение

Lua
1
2
3
4
5
s = "hello world from Lua Здравствуйте люди"
 
for w in string.gmatch(s, "%S+") do
    print( w )
end
Добавлено через 7 минут
Lua
1
2
3
4
5
s = "[data][crc][!@#$%^&*]"
 
for w in string.gmatch(s, "%[(.-)%]") do
    print( w )
end
1
2 / 2 / 0
Регистрация: 06.07.2020
Сообщений: 12
13.04.2022, 21:28  [ТС]
@vantfiles

Благодарю!

Добавлено через 1 час 22 минуты
Можно еще в догонку
Lua
1
2
3
4
5
local words = {}
test = "text and one more text"
words[1], words[2] = test:match("(%S+)(.+)")
print(words[1])
print(words[2])
Вывод:
Code
1
2
text
 and one more text
Пробел перед словом and. Какой паттерн требуется в данном случае что бы пробел не появлялся?
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.04.2022, 21:40
Лучший ответ Сообщение было отмечено maddogmaycry как решение

Решение

Lua
1
2
3
4
5
local words = {}
test = "text and one more text"
words[1], words[2] = test:match("(%S+)%s+(.+)")
print(words[1])
print(words[2])
1
2 / 2 / 0
Регистрация: 06.07.2020
Сообщений: 12
13.04.2022, 21:42  [ТС]
Спасибо!

LUA конечно после "C" одно удовольствие
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.04.2022, 21:44
Цитата Сообщение от maddogmaycry Посмотреть сообщение
одно удовольствие
согласен
0
2 / 2 / 0
Регистрация: 06.07.2020
Сообщений: 12
26.06.2022, 00:33  [ТС]
Извините что сюда, походу вы тут самый большой эксперт по LUA.
Мне необходимо результат этой функции
Lua
1
crc = crypto.crc32(str,string.len(str))
поместить в 4 байта (32 bit).

На СИ это делается следующим способом
C
1
2
3
4
5
6
uint32_t crc = 611360292
unsigned char buf[4];
buf[0] = crc >> 24;
buf[1] = crc >> 16;
buf[2] = crc >> 8;
buf[3] = crc;
Добавлено через 4 часа 22 минуты
Простыми словами как 1936580908 разложить на 4*8bit.

Добавлено через 2 часа 27 минут
Не уверен что вариант но работает
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
local function toBytes(res)
    b = {}
    b[1] = math.floor(res / 2^24)
    b[2] = math.floor((res % 2^24) / 2^16)
    b[3] = math.floor((res % 2^16) / 2^8)
    b[4] = res % 2^8
    for i=1,4 do
        if b[i]<0 then
            b[i] = 256 + b[i]
        end
        b[i] = string.char(b[i])
    end
    return b[1]..b[2]..b[3]..b[4]
end
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
26.06.2022, 10:50
Цитата Сообщение от maddogmaycry Посмотреть сообщение
Не уверен что вариант но работает
Какой версией Lua пользуетесь?
0
2 / 2 / 0
Регистрация: 06.07.2020
Сообщений: 12
27.06.2022, 23:10  [ТС]
Цитата Сообщение от vantfiles Посмотреть сообщение
Какой версией Lua пользуетесь?
Что то вроде 5.1 но возможно она какая то урезанная по библиотекам так как
это LUA для nbiot. На пример не работает конструкция типа
Lua
1
string.pack(">I2", uint):byte(1, -1);
Работает string.format и pack.pack/unpack

Тот вариант что я привел достаточно медленный.
0
54 / 32 / 3
Регистрация: 25.07.2022
Сообщений: 212
25.07.2022, 21:38
maddogmaycry,
Извините что сюда, походу вы тут самый большой эксперт по LUA.
Мне необходимо результат этой функции
Lua
1
crc = crypto.crc32(str,string.len(str))
поместить в 4 байта (32 bit).
Тот код который вы используете не самое лучшее решение.

Вот код который для любого 32-х битного числа максимально быстро выводит байты, вывод массивом их 4-х байтов (чисел от 0 до 255).
Для числа 611360292 результатом будет: 36 112 158 36.
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--create lookup table for octal to binary
oct2bin = {
  ['0'] = '000',
  ['1'] = '001',
  ['2'] = '010',
  ['3'] = '011',
  ['4'] = '100',
  ['5'] = '101',
  ['6'] = '110',
  ['7'] = '111'
}
 
local function oct_to_bin(a) return oct2bin[a] end
local function dec_to_bin(n)
  local s = string.format('%o', n)
  s = s:gsub('.', oct_to_bin)
  s = string.format("%032s", s)
  return s
end
 
local function bin_to_bytes(bin)
  local bytes = {}
  for i= 1, #bin, 8 do
    local byte = tonumber(string.sub(bin, i, i+7), 2)
    table.insert(bytes, byte)
  end
  return bytes
end
 
local function dec32_to_bytes(dec)
  local bin = dec_to_bin(611360292)
  local bytes = bin_to_bytes(bin)
  return bytes
end
 
local bytes = dec32_to_bytes(611360292)
print(table.concat(bytes, " "))
Код использует встроенную возможность перевода любого десятичного числа в OCT (восьмеричную систему счисления), под капотом, то есть максимально быстро, а не самостоятельные велосипеды с делением и т.д.
Потом код переводит восьмеричную число в 32-х битную с ведущими нулями. То есть в любом случае получается 32-х битное число (строка). Потом уже разбивка на байты по 8 бит и вывод. PS: Не нужно строить свои велосипеды с делением и т.д.

Добавлено через 2 минуты
PS: используя встроенные функции в Lua (под капотом), не нужно делать свои велосипеды на самом Lua, то есть Lua написан на Си или типа того и все эти переводы систем счислений будут проведены где-то там (где шустро), а не в самом Lua посредством Lua. Здесь только работа со строками (быстрая) :3.

Попытка делать переводы систем счисления над капотом (велосипеды), это все равно, что написать math.floor, math.ceil и т.д. с нуля на самом Lua (в любом случае будет в разы медленнее функций под капотом на Си).

Добавлено через 4 минуты
PS: Если вам нужно будет использовать код для более длинных комбинаций, в 17-ой строки поменять фиксированную длину с 32 на другое значение: 64 и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.07.2022, 21:38
Помогаю со студенческими работами здесь

Возврат сложных структур из функции - паттерн матчинг
Несколько раз сталкивался с необходимостью написать функцию, которая возвращает много значений (пар, троек, все это объединено в список),...

Надо составить паттерн для нахождения в строке одинарных кавычек, НЕ находящихся внутри английских слов
знаю, как осуществить &quot;заглядывание вперёд&quot;, знаю, как &quot;смотреть назад&quot;, затруднение в том, чтобы это совместить

Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения?
Взято из Шевчук А., Охрименко Д., Касьянов А. Design Patterns via C#. Приемы объектно-ориентированного проектирования (2015): Почему...

паттерн(ы)
1.Назовите паттерн(ы) для организации архитектуры программы позволяющий отделить логику, данные и разметку

паттерн
^{2,1000}$ я не понимаю почему это регулярное выражение пропускает только латинские буквы и некоторые указанные спецсимволы, с русским...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru