powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг строки. Split
10 сообщений из 10, страница 1 из 1
Парсинг строки. Split
    #39578396
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

У кого какие идеи есть, для реализации следующей задачи:

Есть строка
Код: java
1.
String line = "balance.find(WHERE is_active = 'Y'); commander.plsql(BEGIN...END;);";



Как видите в строке описаны некие команды разделенные точкой с запятой (;).
Тут 2 команды, который можно было бы разложить на 2 подстроки методом split.
Код: java
1.
String[] cmd = line.split(";");


Проблема в том, что во второй подстроке присутствуют тсз (;) для sql выражения которые соответственно не должны учитываться.

я предполагаю, что разделение должно происходить в соответствии с уровнем. т.е. в данном примере - на 1 уровне.

За 1 уровень можно считать строку не обрамленную скобками. Если парсер наткнулся на тсз (;) которые находятся внутри скобок, то разделение не производить.

Попытался объяснить как мог.

* тсз (;) - точкой с запятой

Спасибо, с наступающим!
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578402
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПроблема в том, что во второй подстроке присутствуют тсз (;)только для этого кейса:
Код: java
1.
line.split("; ")
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578404
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
String[] cmd = line.split("; ");


только надо ещё сделать
Код: java
1.
cmd[0]=cmd[0]+";"
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578599
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПривет!

У кого какие идеи есть, для реализации следующей задачи:

Есть строка
Код: java
1.
String line = "balance.find(WHERE is_active = 'Y'); commander.plsql(BEGIN...END;);";



Тут изначально формат строки неоднозначен. Вот если был-бы escape-ing PLSQL тогда было-бы проще.

Например.

Код: java
1.
String line = "balance.find(\"WHERE is_active = 'Y'\"); commander.plsql(\"BEGIN...END;\");";


Мы-бы не трекали сплит по внутренним строковым литералам.
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578618
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если писать свой парсинг , то надо учитывать что символы ; ( ) могут быть внутри строки или комментариев.

вопрос - а что это за синтаксис? и зачем тебе его парсить?
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578901
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем, спасибо! Извиняюсь за позднее реагирование, НГ понимаете...))
mayton, Спасибо! Ну допустим я сделаю с эскейп-знаками, у тебя есть вариант как эту строку распарсить?
Код: java
1.
String line = "balance.find(\"WHERE is_active = 'Y'\"); commander.plsql(\"BEGIN...END;\");";



Dmitry., делаю дата-формы в свинге на основе xml где элементы биндятся с данными (датасоурсами). В данном примере balance - это датасоурс в котором есть данные и ими можно манипулировать. commander - хоть и обрабатывается как датасоурс, но им на самом деле не является. Это типа системного коммандреа который может делать какие-то действия на уровне контекста приложения.
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578911
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Идеальный вариант - одна команда (вызов метода) на одну строку.

Другой вариант:
Код: java
1.
String line = "balance.find(\"WHERE is_active = 'Y'\");\ncommander.plsql(\"BEGIN...END;\");";

добавить управляющий символ LF (line feed) между командами (после тчкзпт) -
Код: plaintext
 \n 
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39578931
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

Ну одна команда это конечно исключено, разделение переходами на новую строку как вариант, но оставлю его на закуску, хочу посмотреть как с эскейпами распарсить
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39579142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПривет всем, спасибо! Извиняюсь за позднее реагирование, НГ понимаете...))
mayton, Спасибо! Ну допустим я сделаю с эскейп-знаками, у тебя есть вариант как эту строку распарсить?
Код: java
1.
String line = "balance.find(\"WHERE is_active = 'Y'\"); commander.plsql(\"BEGIN...END;\");";


Все просто, мой недоверчивый друг. Считаешь четные и нечетные кавычки. Если точка с запятой
стоит внутри такого литерала - то мы ее игнорируем. Она принадлежит PLSQL.
...
Рейтинг: 0 / 0
Парсинг строки. Split
    #39579215
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

ммм.. Спасибо, в теории понятно, ща попробую. Я просто думал что будут регулярки сложные =)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг строки. Split
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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