UtoECat
Отдыхай
UtoECat
Wwwww
От 1 до 2 раза все забуду
Wwwww
Много попыток было
Wwwww
Слишком большие пацзы
Wwwww
паузы*
🌗
из чатлога строку достань и сюда пришли
Wwwww
Это на рак боте
Wwwww
Нету
🌗
вот ты с клиента зашел, какой ракбот?
UtoECat
Нету
Пожалуйста упаковывайте свой поток мыслей в одно сообщение
Wwwww
Ладно, спасибо вам. Не хочу своими тупыми вопросами терять ваше время
UtoECat
🌗
local nickname, id = msg:match('\[.-\] {......}(.-)\[(%d+)\]:')
🌗
на
Wwwww
Мне стыдно просто)
Wwwww
Я сам тупой в этой теме
Wwwww
Просто прикалывает что-то делать
Wwwww
Wwwww
Вот, много времени сижу
Wwwww
Читаю все подряд
Wwwww
Уже бошка едет
UtoECat
Уже бошка едет
Значит отдохни. Выйди снежок потрогай, прогуляйся xD
Wwwww
Igor
Как же я не люблю вопросы по игроскриптам... ну в 99% случаев их задают какие-то беспомощные (не в обиду никому), которые просто элементарщину сделать не способны
Igor
Ладно если бы они научиться хотели, но нет. У них в планах один раз задачу решить и забыть че сделали, чтоб потом задать снова аналогичный вопрос и подождать ответа от какого-нибудь доброго дяди.
🌗
UtoECat
UtoECat
Да такое везде есть.
UtoECat
Но я думаю что стоит сейчас не разжигать дискуссию на эту тему. Или если очень хочется - продолжить в оффтопе. Но я не хочу :)
Wwwww
Ахуееть, я понял. Надо было знать как эта функция называется только
Wwwww
Я по разному вводил, но всегда не то было
Highly Likely
Highly Likely
Честно говоря, сколько не интересовался темой скриптов (GMod тот же, Роблокс) — дальше документации не уходил. Она как правило настолько ужасна, а кодовая база настолько нечитаемая, что написать хоть что-нибудь уже победа
Highly Likely
Вот у Факторио апишка норм. Но там уже и так написали всё, что можно придумать xD
Luсky
Ivan
Ребята, что можно использовать в соляре, чтобы распарсить жсон 50мб?
Snusmumriken
Snusmumriken
Используй модуль safe
Ivan
lua-cjson
Он же на сишке? Разве я могу его в соляру интегрировать?
Snusmumriken
А, он кажись уже интегрирован
https://docs.coronalabs.com/api/library/json/index.html
Ivan
Ну, декодя этой штукой, говорят, что «чел, память закончилась»
Snusmumriken
Но вообще, ты берёшь и пишешь в манифест имя модуля из репозитория соляры, и оно подгружает
Snusmumriken
Ну тады можешь попробовать
https://github.com/rxi/json.lua
Snusmumriken
Если и тут память заканчивается — не парсь жсоны размером 50 метров.
Выцепи оттуда однотипные маленькие жсончики и декодируй уже их.
Snusmumriken
Например
for block in jsondata:gmatch("%b{}") do
print(block)
end
Если у тебя массив объектов
Ivan
Snusmumriken
Ivan
Ivan
Ivan
Highly Likely
Декодить джейсон он зе флай
Snusmumriken
Умные ребята пишут потоковые декодеры.
Неплохо так работают с массивами данных в произвольном формате.
Highly Likely
Snusmumriken
Snusmumriken
Потому что 50мб рандомной фигни статистически попадается очень редко, как правило это или кусок бд или конфиг или список конфигов.
Snusmumriken
Выделяешь оттуда строчки отдельных объектиков и парсишь их по отдельности.
Snusmumriken
Если нет, и это действительно полностью рандомный жсон с рандомными полями и конфигами — у тебя проблемсы. В его разборе. Код который его анализирует и что-то делает исходя из полей, должен занимать раз в пять больше чем эти 50 мбайт.
Ivan
Чел, это рандомный жсон? У него внутри вообще никакой структуры нету? Массива объектов?
Ну, он приходит с сервера. Структура есть, конечно. Страницы, в страницах текст, код, фон, кнопки и всякое
Просто немного лень писать парсер жсона, если это тоже не заработает. Я немного не впитываю, в чем разница, перебирать строку самому или с помощью функции декодирования
Snusmumriken
Ну, он приходит с сервера. Структура есть, конечно. Страницы, в страницах текст, код, фон, кнопки и всякое
Просто немного лень писать парсер жсона, если это тоже не заработает. Я немного не впитываю, в чем разница, перебирать строку самому или с помощью функции декодирования
С помощью функции декодирования, оно парсит в структуру весь жсон полностью, делая ещё кучку мусора по ходу дела.
С помощью ручного парсера, ты можешь вычленять из 50 мб текста кусочки условно по 1-2кб (отдельные элементы), парсить их, подгружая только их, а потом удаляя их из памяти. И так по очереди, с каждым кусочком. Взял, обработал, удалил.
Давай возьмём пример посложнее.
У тебя json на 500тб.
В память он влезет? Нет. А прочитать надо.
Ты такой считываешь из него по маленькому кусочку, ищешь отдельные логические блоки, вычленяешь их, обрабатываешь, удаляешь из памяти все данные связанные с содержимым json'а. И так проходишь по всем 500тб.
Можно ещё сделать индекс, мол, список побайтовых границ отдельных элементов.
Скачал json — сохранил в файл — seek'ом перемещаешься на нужный блок (например, в твоём случае на страницу), вытаскиваешь нужное количество байтиков, декодируешь отдельную страничку, что-то с ней делаешь.
Даже без того чтобы иметь все 50мб в оперативке.
Highly Likely
Если есть схема, lazy-load запилить не очень сложно
Highly Likely
Да и потоковое чтение при желании тоже
Timur
потоковое чтение для json не сделать, т.к. только дойдя до конца можно понять, что коллекция/массив в json валидная.
Но есть jsonl, который можно по-строчно парсить, именно что в поточном режиме
Snusmumriken
В общем виде конечно нельзя, в частном можно.
Проверить валидность жсона кстати в целом можно подсчётом скобочек и запятых, без полного парсинга. То есть как парсинг но без разметок структур. И пробегать по нему по частям же.
Timur
Snusmumriken
У нас же проблема не времени а самого факта чтения
Да и jsonl это частный случай форматирования json'чиков, просто чтобы было удобненько.
По сути, если это список, то подсчётом скобочек и банальным %b{} ты делаешь примерно то же самое что уже есть в jsonl. Просто сам факт что "файл оформили как jsonl" демонстрирует что тут списочек.
Но тут примерно известный json, и его скорее всего можно обычным %b{} и распарсить.
Lucky
А вот тут смежный вопрос - прочитал я жсон в табличку. Чем красиво эту табличку в файл записать, чтобы потом реквайр ея?
Lucky
Чтобы визуально структура подтаблиц сохранялась. Есть такое?
Lucky
Эта вот работает. Но не так красиво, как хочется. http://lua-users.org/wiki/SaveTableToFile
Mediator
Lucky
Пардон, кажется, то, что нужно - https://github.com/kikito/inspect.lua