
Group Butler [beta]
13.11.2017
02:30:38
Добро пожаловать в чат pro.lua, Aziz! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.
Добро пожаловать в чат pro.lua, Maxim! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Maxim
14.11.2017
00:54:54
всех приветствую =) Собственно из-за Defold'а к вам занесло. Профильного чатика не нашел

Google

Snusmumriken
14.11.2017
04:08:02

Maxim
14.11.2017
07:57:34
Ребята, подскажите, есть чатик по defold? А если нет и нас много, то мб поднимем его

Saphire
14.11.2017
10:08:52

annelin
14.11.2017
12:14:15
кто-нибудь умеет нормально в регекспы?
юниксовые, не lua-шные

Snusmumriken
14.11.2017
12:52:05
юниксовые, не lua-шные
Ты имеешь ввиду PCRE?
Дык там же всё то же что и в луашных, но \ вместо %, есть указание количества {a[, b]}, и всякие OR | а так - всё то же самое.
Умеющий в одни регулярки умеет в другие.

annelin
14.11.2017
13:21:39
мне нужно заменить секцию в INI-файле.
например:
[A]
key=value
[B]
key=value
[C]
key=value
нужно заменить секцию A.
как это грамотнее сделать?
inb4 распарсить ini-файл либой, удалить нужную секцию и перезаписать файл

fgntfg
14.11.2017
13:25:45
Найти в файле метку [A]. Начать удалять пока не наткнёшься на следующую метку или EOF

Snusmumriken
14.11.2017
13:26:51
Ммм.
Ну, на луях -
input = io.read(filename, 'rb')
text = input:read('*all'); input:close()
-- эта версия не удалит блок если он последний ((
text = text:gsub('(%[SECTIONNAME%].-)%[', '')
output = io.read(filename, 'wb')
output:write(text); output:close()
В юниксах - грепать похожим образом.

annelin
14.11.2017
13:27:53
ага, а если мы заменяем что-то в секции A — секция B сотрётся к чертям?
потому что матч будет до последней [, а последняя [ у нас в начале [C]

Google

Snusmumriken
14.11.2017
13:28:31
М?
До первой попавшейся [

annelin
14.11.2017
13:28:58
а где это указано в регэкспе?

fgntfg
14.11.2017
13:29:01
@Snusmumriken не совсем правильно [ может быть частью строки

annelin
14.11.2017
13:29:10

fgntfg
14.11.2017
13:29:15
может
я спеки читал

annelin
14.11.2017
13:29:21
если могло бы быть — проще распарсить Ini

Snusmumriken
14.11.2017
13:29:28
Там это возможно? Ну тогда \n%[
Ключи не могут быть в этой фигне.

annelin
14.11.2017
13:29:30
я тебе говорю про свой конфиг

fgntfg
14.11.2017
13:29:50
храни конфиг в lua table

Snusmumriken
14.11.2017
13:30:08

annelin
14.11.2017
13:30:26
мне вообще однострочником на баше это всё желательно сделать )
если уж скриптом - то проще распарсить ini питоном/перлом
да и луя вроде умеет

fgntfg
14.11.2017
13:31:09
технически разницы между lua. python и perl нет никакой разницы

Snusmumriken
14.11.2017
13:31:13
Ну, просто я люблю тулзы типа парсеров, и решать проблемы скриптами (потому что вендузятник).
На юниксах - греп, конкретно - не скажу, надо сделать инишку и потестить.

Saphire
14.11.2017
13:31:27

annelin
14.11.2017
13:31:35
perl -i -pe "s/\[sectionA\].*\[/\[sectionA\]\nOUR_CUSTOM_DATA\n\[/s" если делать так - он ищет наибольшее совпадение, а не до первой следущей [

Snusmumriken
14.11.2017
13:32:03
Мм.
А как сделать чтобы поиск перестал быть жадным, знаешь?

annelin
14.11.2017
13:32:10
а вот не знаю

Google

Snusmumriken
14.11.2017
13:32:23
.- - не жадный поиск в луа, аналог - .*?.
print( ('banana'):match('ba.*na') ) --> 'banana'
print( ('banana'):match('ba.-na') ) --> 'bana'

annelin
14.11.2017
13:32:38
? вроде бы
но если регэксп взять в скобки и добавтиь после ? — тоже самое
о
вроде ок
?\]
вот так

Snusmumriken
14.11.2017
13:35:07
Балуйся с регекспами, они полезные.

fgntfg
14.11.2017
13:35:36
мне регепсы както помогли починить наш пром

annelin
14.11.2017
13:35:44
ненавижу регэкспы =)

fgntfg
14.11.2017
13:35:47
но, правда, в Oracle
регэкспы это очень мощная магия.

Vlad
14.11.2017
13:36:07
а что значения в таблицах с текстовыми ключами сортируються?

annelin
14.11.2017
13:36:30
единственная штука, которая меня раздражает в луе

fgntfg
14.11.2017
13:36:54
Почему?
просто ассоциативные массивы не имеют порядка

annelin
14.11.2017
13:38:06
потому что мне нужно, например, сгенерировать конфиг в табличку, а потом представить его в текстовом виде
а тот софт, который будет читать этот конфиг - восприимчив к порядку записей
дратути!

Google

fgntfg
14.11.2017
13:39:12
Так можно сортировать же. Емнп есть sort с колбеком. Я же не путаю языки?

annelin
14.11.2017
13:39:39
сортировать как?
мне нужно, чтобы в ассоциативном массиве записи были в том порядке, в котором я их добавил
в почти всех языках это так
ну или, в крайнем случае, чтобы была хоть какая-то логика при итерации через pairs()
а не доверять всё ёбаному рандому

fgntfg
14.11.2017
13:40:47
`
local t = { [223]="asd", [23]="fgh", [543]="hjk", [7]="qwe" }
local tkeys = {}
—populate the table that holds the keys
for k in pairs(t) do table.insert(tkeys, k) end
—sort the keys
table.sort(tkeys) — use the keys to retrieve the values in the sorted order
for _, k in ipairs(tkeys) do print(k, t[k]) end `
pfpfpfplfp

annelin
14.11.2017
13:41:30
да, чёт типа того и приходится изобретать

fgntfg
14.11.2017
13:41:35
какой тут тег для кода?

annelin
14.11.2017
13:41:40
`
жопа

Snusmumriken
14.11.2017
13:41:59
Потому что для ускорения поиска в 100500 раз используются хеши.
Для того чтобы держать порядок, можно или прицепить метатаблицу с проксей (на __index/__newindex и методом __pairs возвращающим ключи-значения-индекс, которая хранит в замыкании порядок),
или типа такого:
function add(tbl, key, v)
tbl[key] = v
tbl[#tbl + 1] = v
end
function remove(tbl, key, index)
local removed_now
local v = tbl[key]
index = index or 1
for i = 1, #tbl do
if removed_now then
tbl[i] = tbl[i + 1]
else
if tbl[i] = v then
tbl[i] = nil end
removed_now = true
end
end
end
tbl[key] = nil
end
t = {}
add(t, 'yoyo', 10)
remove(y, 'yoyo')

fgntfg
14.11.2017
13:42:46
тут явно не о производительности речь

Snusmumriken
14.11.2017
13:43:08
Где именно?
Да, для того чтобы в словаре был порядок - нужно где-то ДЕРЖАТЬ ЭТОТ ПОРЯДОК, что жрёт память и замедляет удаление, если удалять без индекса + ключа, а ещё тут проблемы с удалением ключей, ибо все остальные надо сдвигать назад.
Да. Там где нужен порядок - объективно не особо нужны словари. Инфа сотка.
Лучше уж список типа:
{
{a = 10, b = 20},
{a = 20, b = 30},
}
Если уж так нужны ключи.
И порядок сохраняется )))

Daniel
14.11.2017
13:48:48
Я не знаю с чего начать
Помогите, пожалуйста.

Philipp
14.11.2017
13:49:24
Ты первую решить не можешь?))

Google

Daniel
14.11.2017
13:49:36
Первую решил
И третью решил
На втором застрял

annelin
14.11.2017
13:50:01
о, я такие лет 5 назад решал)
на олимпиадках по программированию))

Daniel
14.11.2017
13:50:18
(на Lua)

Philipp
14.11.2017
13:50:32
Проблема в том, что олимпиады Луа не принимают :с
Я так проебал последнюю

annelin
14.11.2017
13:50:44
я на сишечке писал
выебнулся тип

Philipp
14.11.2017
13:50:46
Задачи на Луа решил - на ++\Питон перенести времени не хватило

Daniel
14.11.2017
13:50:50
А мне что делать то?

annelin
14.11.2017
13:50:51
а меня не приняли :(

Philipp
14.11.2017
13:50:59

Daniel
14.11.2017
13:50:59
У нас на луа....

annelin
14.11.2017
13:51:00

Philipp
14.11.2017
13:51:10
Я например собирался только тебе решение написать
Не код, а алгоритм
Принимаешь 5 целых чисел с помощью read, сортируешь, откидываешь наибольшее и наименьшее число
Остальные три складываешь