Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Раздел для общения на любые темы, для которых не нашлось места в остальных разделах. Если Вашу тему можно отнести по смыслу к другому разделу, лучше создайте её там, иначе Вас накажут.

В данном форуме немного понижены требования к Общим правилам форума, а именно:
1. Информативность темы
2. Отходить от первоначального смысла темы

!
В разделе запрещено создавать темы связанные с раскруткой игровых серверов

Помощь по языку LUA

Статус пользователя jasminem
сообщение 13.6.2015, 19:56
Сообщение #1


Стаж: 12 лет

Сообщений: 47
Благодарностей: 72
Полезность: 513

Я совсем не прогер, целый день стараюсь гуглить маны, но результата пока нет.

Требуется парсить значения из строки, как вариант значения распихать в массив.

Строка:
клац
"[[\"plaksin562\",\"760\"],[\"plaksin562\",\"640\"],[\"plaksin562\",\"85\"],[\"plaksin562\",\"941\"],[\"plaksin562\",\"122\"],[\"plaksin562\",\"151\"],[\"1\",\"1183\"],[\"1\",\"1021\"],[\"1\",\"134\"],[\"1\",\"2019\"],[\"1\",\"151\"],[\"1\",\"213\"],[\"0\",\"932\"],[\"0\",\"992\"],[\"0\",\"133\"],[\"0\",\"2615\"],[\"0\",\"90\"],[\"0\",\"196\"],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[
null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null
],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,n
ull],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[nul
l,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[
null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null
],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,n
ull],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[nul
l,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[
null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null
],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[null,n
ull],[null,null],[null,null],[null,null],[null,null],[null,null],[null,null],[nul
l,null],[null,null]]"


Используемый код возвращает только plaksin562, далее не обрабатывает строку.

Код
  local str = string.match(str, '\\"(.-)\\"')
  print(str)
  return str


Есть идеи? Вообще, собирался пробовать убирать лишние символы, затем разделять полученные данные в табличку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя deepz
сообщение 13.6.2015, 19:59
Сообщение #2


Стаж: 15 лет

Сообщений: 245
Благодарностей: 65
Полезность: 70

По первым признаком это JSON. Если структура статическая, то используйте стандартную либу от json.org. Если нет, нужно писать велосипед.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 13.6.2015, 20:00
Сообщение #3
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Правильно, находится первое значение. Нужно зациклить это все и обрезать уже обработанный кусок строки
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jasminem
сообщение 13.6.2015, 20:10
Сообщение #4


Стаж: 12 лет

Сообщений: 47
Благодарностей: 72
Полезность: 513

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

С JSON было легко работать с плагином выдачи погоды, пример - http://api.openweathermap.org/data/2.5/weather?q=Moscow

Тогда все было просто
Скрытый текст
local b, c, h = http.request(url)
if c ~= 200 then return nil end

local weather = json:decode(b)
local city = weather.name
local country = weather.sys.country
local temp = 'The temperature in '..city
..' (' ..country..')'
..' is '..weather.main.temp..'В°C'
local conditions = 'Current conditions are: '
.. weather.weather[1].description


Здесь же аналогии не провести, формат вывода данных из API другой.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя deepz
сообщение 13.6.2015, 20:15
Сообщение #5


Стаж: 15 лет

Сообщений: 245
Благодарностей: 65
Полезность: 70

Цитата(jasminem @ 13.6.2015, 21:10) *
На линуксру.орг пишут, что "В отличии от регулярных выражений, паттерны нельзя использовать для поиска повторяющих слов (под-строк) в строке"

С JSON было легко работать с плагином выдачи погоды, пример - http://api.openweathermap.org/data/2.5/weather?q=Moscow

Тогда все было просто
Скрытый текст
local b, c, h = http.request(url)
if c ~= 200 then return nil end

local weather = json:decode(b)
local city = weather.name
local country = weather.sys.country
local temp = 'The temperature in '..city
..' (' ..country..')'
..' is '..weather.main.temp..'В°C'
local conditions = 'Current conditions are: '
.. weather.weather[1].description


Здесь же аналогии не провести, формат вывода данных из API другой.

У вас это тоже JSON. В данном случае это массив массивов.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jasminem
сообщение 14.6.2015, 12:17
Сообщение #6


Стаж: 12 лет

Сообщений: 47
Благодарностей: 72
Полезность: 513

Подскажите, каким образом тогда я могу обратиться к значениям в таких массивах?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jasminem
сообщение 14.6.2015, 15:02
Сообщение #7


Стаж: 12 лет

Сообщений: 47
Благодарностей: 72
Полезность: 513

На случай, если кому пригодится.

Сделал для себя такой костыль:
Убираем лишние символы, создаем таблицу и в нее через заданный разделитель вводим данные. Затем для вывода сообщения просто берем нужные нам значения по индексу в таблице.

Код:
local strorig = json:decode(b)
local str1 = string.gsub(strorig, '\"', "")
local str2 = string.gsub(str1, "%p", " ")
local str3 = string.match(str2, "^.-null")
local uprt = {}
for w in (str3 .. " "):gmatch("([^ ]*) ") do
table.insert(uprt, w) end
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: