UtoECat
Отдыхай
Wwwww
потому что игровой мод скачали из тырнетов
Да, с моим свободным временем попробуй сесть писать свой
Wwwww
От 1 до 2 раза все забуду
Wwwww
Много попыток было
Wwwww
Слишком большие пацзы
Wwwww
паузы*
🌗
из чатлога строку достань и сюда пришли
Wwwww
Это на рак боте
UtoECat
Да, с моим свободным временем попробуй сесть писать свой
Тут уже вопросы к построению графика, который ты должен задавать себе сам. И туда же вопросв тем ли ты занимаешься в основное время
Wwwww
Нету
🌗
вот ты с клиента зашел, какой ракбот?
UtoECat
Нету
Пожалуйста упаковывайте свой поток мыслей в одно сообщение
Wwwww
Ладно, спасибо вам. Не хочу своими тупыми вопросами терять ваше время
UtoECat
Ладно, спасибо вам. Не хочу своими тупыми вопросами терять ваше время
Если бы мы теряли время, мы бы тебе не отвечали :D
🌗
local nickname, id = msg:match('\[.-\] {......}(.-)\[(%d+)\]:')
🌗
на
Wwwww
Мне стыдно просто)
Wwwww
Я сам тупой в этой теме
Wwwww
Просто прикалывает что-то делать
UtoECat
Я сам тупой в этой теме
Значит есть повод подтянуть знания. Не ныть, а делать, как говорится :)
Wwwww
Вот, много времени сижу
Wwwww
Читаю все подряд
Wwwww
Уже бошка едет
UtoECat
Уже бошка едет
Значит отдохни. Выйди снежок потрогай, прогуляйся xD
Igor
Как же я не люблю вопросы по игроскриптам... ну в 99% случаев их задают какие-то беспомощные (не в обиду никому), которые просто элементарщину сделать не способны
UtoECat
Как же я не люблю вопросы по игроскриптам... ну в 99% случаев их задают какие-то беспомощные (не в обиду никому), которые просто элементарщину сделать не способны
Ну... Тут уже поднимаются вопросы риторические... Кому надо один мод один раз подправить, тем плевать собственно на прграммирование и всё остальное. А новички позадают, позадают, и, если оно им действительно надо, после парочки посылов в правильном направлении и помощи, сами уже будут помогать другим
Igor
Ладно если бы они научиться хотели, но нет. У них в планах один раз задачу решить и забыть че сделали, чтоб потом задать снова аналогичный вопрос и подождать ответа от какого-нибудь доброго дяди.
🌗
Ну... Тут уже поднимаются вопросы риторические... Кому надо один мод один раз подправить, тем плевать собственно на прграммирование и всё остальное. А новички позадают, позадают, и, если оно им действительно надо, после парочки посылов в правильном направлении и помощи, сами уже будут помогать другим
сам под эту игру скрипты писал, дальше статуса "скрипткидди" немногие уходят чаще всего учатся по гайдам другого скрипткидди, а о PiL могут и вовсе не знать если интересно откуда такая каша в головах - кликабельно
UtoECat
Да такое везде есть.
UtoECat
Но я думаю что стоит сейчас не разжигать дискуссию на эту тему. Или если очень хочется - продолжить в оффтопе. Но я не хочу :)
Wwwww
Ахуееть, я понял. Надо было знать как эта функция называется только
Wwwww
Я по разному вводил, но всегда не то было
Highly Likely
Честно говоря, сколько не интересовался темой скриптов (GMod тот же, Роблокс) — дальше документации не уходил. Она как правило настолько ужасна, а кодовая база настолько нечитаемая, что написать хоть что-нибудь уже победа
Highly Likely
Вот у Факторио апишка норм. Но там уже и так написали всё, что можно придумать xD
Ivan
Ребята, что можно использовать в соляре, чтобы распарсить жсон 50мб?
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 Если у тебя массив объектов
UtoECat
Да, подключать плагины-то я умею, но вроде нет cjson плагина
Может у тебя нет памяти на то, чтобы вместить распаршенную табличку?
Ivan
Ну тады можешь попробовать https://github.com/rxi/json.lua
ну 50 мегов-то у меня всяко есть)
Highly Likely
... Парсинг по частям
К слову, занимательная задачка, если JSON-табличка нетривиальная
Highly Likely
Декодить джейсон он зе флай
Snusmumriken
Умные ребята пишут потоковые декодеры. Неплохо так работают с массивами данных в произвольном формате.
Ivan
Например for block in jsondata:gmatch("%b{}") do print(block) end Если у тебя массив объектов
То есть прямо ручками парсить жысон? А не то же ли получится, что и декодить? У меня там и объекты, и просто поля есть: Типа: {"id:"100500", json:["pages":{1:{"text":"abc"}}]} (может, не совсем правильно оформил скобочки, но структура типа того)
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
для того, чтобы подсчитать скобочки надо прочитать поблочно весь файл, а это - самая весомая часть во времени обработки большого файла. Парсинг лишь - О-малое от чтения
В том-то и дело что можно поблочно, не читая файл полностью. Можно даже кормить поток пока тот не выплюнет "да, это валидный файл", вычищяя все захаванные куски строчек.
Snusmumriken
У нас же проблема не времени а самого факта чтения Да и jsonl это частный случай форматирования json'чиков, просто чтобы было удобненько. По сути, если это список, то подсчётом скобочек и банальным %b{} ты делаешь примерно то же самое что уже есть в jsonl. Просто сам факт что "файл оформили как jsonl" демонстрирует что тут списочек. Но тут примерно известный json, и его скорее всего можно обычным %b{} и распарсить.
Lucky
А вот тут смежный вопрос - прочитал я жсон в табличку. Чем красиво эту табличку в файл записать, чтобы потом реквайр ея?
Lucky
Чтобы визуально структура подтаблиц сохранялась. Есть такое?
Lucky
Эта вот работает. Но не так красиво, как хочется. http://lua-users.org/wiki/SaveTableToFile
Lucky
Пардон, кажется, то, что нужно - https://github.com/kikito/inspect.lua
Mediator
В том-то и дело что можно поблочно, не читая файл полностью. Можно даже кормить поток пока тот не выплюнет "да, это валидный файл", вычищяя все захаванные куски строчек.
Можно не запоминать строки, а записывать только индекс начала и конца для экономии памяти при первом проходе. А при необходимости потом выдергивать эти значения. Поле для оптимизации действительно широкое.