Парсинг текста

  1. 3 months ago

    Здравствуйте, не знаю у кого еще можно спросить. Вопрос такой:
    Есть строка с форматированием, например (Вася Пупкин\nдата:[date]03.02.2012[/date])
    надо получить массив в таблицу Lua

    {
     1 = {
            1 = Вася
            2 = Пупкин
     },
     2 = {
            1 = {"дата:", bold}
            2 = {"03.02.2012", date}
     }
    }

    получается массив в виде: table["строка"]["слово"]["тип"]
    естественно реализация вся на Lua
    P.S. XML и JSON не предлагать

  2. Casper_nn

    Apr 28 User since 2014

    У тебя какой-то неправильный пример. Почему для даты выделено тегами [date] а для полужирного начертания не выделено?

    Формат написан ["строка"]["слово"]["тип"], а в примере в первом элементе хранятся строки.

    >XML и JSON не предлагать
    Почему?

    Лучше напиши что конкретно хочешь добиться, вероятно есть более простой путь.

  3. Edited 3 months ago by DIMMaX

    сайт пожрал тег и выделил дату, на самом деле:

    Вася Пупкин\n[b]дата:[/b][date]03.02.2012[/date]

    Casper_nn Формат написан ["строка"]["слово"]["тип"], а в примере в первом элементе хранятся строки.

    - да, первый элемент массива - таблица строк, а в ней таблица со словами, а в таблице со словами -- таблица с тегом( нужно для вывода форматированного текста)

    задача - вывести форматированный текст и знать значения в виде таблицы (сразу ясно имя - table[1][1], а дата - table[2][2])

    почти сделал

    s = [[текст
    вторая строка]]
     
    	local ii = {"[^\n]+", "[^ ]*"}
     
    	function pars(v, sub, pos)
    		local i = {}
    		if #sub > 0 and sub[pos] ~= nil then
    			for tmp in string.gmatch(v,sub[pos]) do
    				table.insert(i, pars(tmp,sub,pos+1))
    			end
    		else
    			return v
    		end
    		return i
    	end
     
    output = (pars(s,ii,1))
  4. Casper_nn >XML и JSON не предлагать
    Почему?

    - там не совсем то, что мне надо. не так делает
    он на отдельные слова не разобьет теги, надо именно из этого -

    Вася Пупкин\n[b]дата:[/b][date]03.02.2012[/date][b]слово1 слово2[/b]

    вот это -

    {
     1 = {
            1 = Вася
            2 = Пупкин
     },
     2 = {
            1 = {"дата:", bold}
            2 = {"03.02.2012", date}
            3 = {"слово1", bold}
            4 = {"слово2", bold}
     }
    }

    XML выдаст совершенно другое, например при

    [b]слово1 слово2[/b]

    что он выдаст? - правильно, -
    {
     Name ="bold",
     Nodes = "слово1 слово2"
    }
     

  5. Casper_nn

    Apr 28 User since 2014

    да, первый элемент массива - таблица строк, а в ней таблица со словами, а в таблице со словами -- таблица с тегом( нужно для вывода форматированного текста)

    Я не про это, у тебя то что хранится в массиве строк (слова) в примере 1 = Вася то есть элемент имеет тип строка, в другом случае слово это таблица из двух элементов {"слово",тип}. Тогда уж должно быть {"Вася",''string"} или {"Вася"} или в обработчике проверять на тип элемента, но тогда по индексам к ним нельзя обращаться явно

    XML выдаст совершенно другое

    Не понимаю, что значит xml выдаст. xml это способ хранения иерархически организованной информации. То что ты используешь теги в квадратных скобках это похожая тема. Ты хочешь сделать что-то типа форматирования как на формуах? Тогда там гораздо сложнее должен быть код, посмотри как сделан парсер из xml в таблицы, в интернете лежат примеры http://lua-users.org/wiki/LuaXml или еще есть где-то на форуме инстед или в коде игр модуль scene, там тоже парсятся теги. Тебе же нужно искать открывающий и закрывающий тег как минимум. Я тут толком не посоветую, но окончательной задачи не понимаю, наверное можно с меньшими заморочками сделать.

  6. Edited 3 months ago by DIMMaX

    мне надо получить при дампе - таблицу:

    {
     1 = {
            1 = Вася
            2 = Пупкин
     },
     2 = {
            1 = {"дата:", bold}
            2 = {"03.02.2012", date}
            3 = {"слово1", bold}
            4 = {"слово2", bold}
     }
    }

    а не из

    <Config>
    	<EntityList>
    		<Entity value="1"2"3">innerText</Entity>	
    		<Entity value="456"></Entity>
    	</EntityList>
    </Config>

    - вот это...

    Spoiler!

    <log> {
    <log> Attributes =
    <log> [table]
    <log> {
    <log> }
    <log> Name="Config"
    <log> ChildNodes =
    <log> [table]
    <log> {
    <log> 1 =
    <log> [table]
    <log> {
    <log> Attributes =
    <log> [table]
    <log> {
    <log> }
    <log> Name="EntityList"
    <log> ChildNodes =
    <log> [table]
    <log> {
    <log> 1 =
    <log> [table]
    <log> {
    <log> Value="innerText"
    <log> Attributes =
    <log> [table]
    <log> {
    <log> value="1"2"3"
    <log> }
    <log> Name="Entity"
    <log> ChildNodes =
    <log> [table]
    <log> {
    <log> }
    <log> }
    <log> 2 =
    <log> [table]
    <log> {
    <log> Attributes =
    <log> [table]
    <log> {
    <log> value="456"
    <log> }
    <log> Name="Entity"
    <log> ChildNodes =
    <log> [table]
    <log> {
    <log> }
    <log> }
    <log> }
    <log> }
    <log> }

    а так, я почти доделал, осталось теги прописать

or Sign Up to reply!