Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите инструмент / 8 сообщений из 8, страница 1 из 1
03.10.2015, 22:09
    #39067739
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Есть вот такие структуры данных (2х видов) в текстовом виде
Код: java
1.
2.
3.
4.
5.
{
	{[quick_step_potion];1;1;4.4835};
	{[leather_gloves_lining];1;1;17.6402};
	{[quick_step_potion];1;1;4.4835}
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
{
	{
		{
			{[adena];126;215;100}
		};70
	};
	{
		{
			{[shining_knife];1;1;50};
			{[throw_knife];1;1;50}
		};0.0303
	};
	{
		{
			{[charcoal];1;1;45.9527};
			{[suede];1;1;30.6351};
			{[rp_blue_diamond_necklace];1;1;21.574};
			{[rp_adv_comp_soulshot_d];1;1;1.8382}
		};8.6461
	}
}
}



Нужно поменять цифры, регулярками можно конечно, но может существует более удобный инструмент?
...
Рейтинг: 0 / 0
04.10.2015, 10:42
    #39067809
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Не рефлексируй на инструменты. Напиши парсер, благо формат простой.
...
Рейтинг: 0 / 0
04.10.2015, 12:34
    #39067835
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Hett,

Формат похож на json, можете посмотреть на мой парсер и методы fromJson и toJson в библиотеке underscore-string .

С уважением, Валентин
...
Рейтинг: 0 / 0
04.10.2015, 13:20
    #39067851
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
как раз хотел попробовать antlr

за основу для грамматики взял json https://github.com/antlr/grammars-v4/blob/master/json/JSON.g4
отличный сампл с описанием: http://stackoverflow.com/questions/1931307/antlr-is-there-a-simple-example

грамматика
Код: ruby
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
grammar SCJSON;

root returns [java.util.ArrayList local]
    : exp = array { $local = $exp.local; }
    ;


array returns [java.util.ArrayList local]
    :   '{'      { $local = new java.util.ArrayList(); }
        v1=value { $local.add($v1.local); }
        (';' 
        v2=value { $local.add($v2.local); }
        )* 
        '}' 
    ;

value returns [Object local]
    :   s=STRING {$local = $s.text;}
    |   n=NUMBER {$local = new java.math.BigDecimal($n.text);}
    |   a=array  {$local = $a.local;} // recursion
    ;

STRING :  '[' (~']')* ']' ;
NUMBER
    :   '-'? INT '.' INT // 1.35, 0.3, -4.5
    |   '-'? INT                 // -3, 45
    ;
fragment INT :   [0-9]+ ; // no leading zeros
WS  :   [ \t\n\r]+ -> skip ;




генерация классов парсера по грамматике
Код: xml
1.
2.
3.
4.
5.
6.
7.
		<java classpathref="build.classpath" classname="org.antlr.v4.Tool" fork="true" failonerror="true">
			<arg value="src/SCJSON.g"/>
			<arg value="-o"/>
			<arg value="${src}/scjson/parser"/>
			<arg value="-package"/>
			<arg value="scjson.parser"/>
		</java>



код для парсинга
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import org.antlr.v4.runtime.*;
import scjson.parser.SCJSONLexer;
import scjson.parser.SCJSONParser;

public class Main{
	public static void main(String [] arg)throws Exception{
		CharStream in = new ANTLRFileStream("./test.txt","UTF-8");
		SCJSONLexer lexer = new SCJSONLexer(in);
		CommonTokenStream tokens = new CommonTokenStream(lexer);
		SCJSONParser parser = new SCJSONParser(tokens);
		System.out.println( ">>>"+parser.root().local );
	}
}




результат
результатом является массив с элементами: строка или число или вложенный массив
>>>[[[quick_step_potion], 1, 1, 4.4835], [[leather_gloves_lining], 1, 1, 17.6402], [[quick_step_potion], 1, 1, 4.4835]]

выпечатывание в нужном формате - легко
...
Рейтинг: 0 / 0
04.10.2015, 16:18
    #39067889
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Всем спасибо.
Остановлюсь на antlr, мощная штука.
К тому же тут уже пол задачи за меня сделали.
Единственное, что мне пока не понятно, как использовать эту XML:

Код: java
1.
2.
3.
4.
5.
6.
7.
		<java classpathref="build.classpath" classname="org.antlr.v4.Tool" fork="true" failonerror="true">
			<arg value="src/SCJSON.g"/>
			<arg value="-o"/>
			<arg value="${src}/scjson/parser"/>
			<arg value="-package"/>
			<arg value="scjson.parser"/>
		</java>



Пока из командной строки генерю.
...
Рейтинг: 0 / 0
04.10.2015, 18:23
    #39067915
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Это кусок скрипта для ant.
...
Рейтинг: 0 / 0
04.10.2015, 20:35
    #39067957
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
Да, действительно удобный)
...
Рейтинг: 0 / 0
04.10.2015, 22:07
    #39067989
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите инструмент
fixxerЭто кусок скрипта для ant.
спасибо, когда написал, уже сам допер :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите инструмент / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]