powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите инструмент
8 сообщений из 8, страница 1 из 1
Подскажите инструмент
    #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
Подскажите инструмент
    #39067809
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не рефлексируй на инструменты. Напиши парсер, благо формат простой.
...
Рейтинг: 0 / 0
Подскажите инструмент
    #39067835
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

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

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


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