Текущее время: Пт, ноя 01 2024, 03:35

Часовой пояс: UTC + 3 часа


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


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Парсим строку
СообщениеДобавлено: Чт, фев 02 2012, 19:03 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
Добрый вечер.

Задание: есть строка куда пользователь вводит набор элементов(значений), надо распарсить строку положив каждой значение в отдельную ячейку таблицы. Ах да, как разделены значения не известно, это может быть пробел или любой символ или набор символов, все разделители одинаковые.

Возможно ли это реализовать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Чт, фев 02 2012, 22:16 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Посмотрите help по split...into [table]...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Чт, фев 02 2012, 22:32 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
LELUK написал(а):
Добрый вечер.

Задание: есть строка куда пользователь вводит набор элементов(значений), надо распарсить строку положив каждой значение в отдельную ячейку таблицы. Ах да, как разделены значения не известно, это может быть пробел или любой символ или набор символов, все разделители одинаковые.

Возможно ли это реализовать?


в том контексте, что вы написали, конечно же нет. как вообще можно парсить то, не зная что ? :?

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 10:28 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
То что задача во многих случаях не решаема - это очевидно.
Но если абстрагироваться и спуститься до уровня консультанта то:
1) Строка будет состоять из минимум 3 элементов - сл-но в строке будет как минимум 2 повторяющиеся под строки
2) Думаю разделительный элемент будет стандартный(; , или space)
3) Если нет то, будет отличаться по контексту.(Мы парсим не шифр, а понятную для консультанта строку)

По этому можно обработать большое кол-во частных вариантов, в ином случае выдавать сообщение об ошибке и тд.
Мне задача показалась интересной(своеобразное внедрение Иску. Интелекта в SAP :D )


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 10:48 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 489
Пол: Мужской
Искуственный интелект подразумевает наличие базы знаний..
1) Все элементы будут различны? Наличие пустого значения подразумевается? Наличие спец. символов в значениях (: ; / . , и т.д.)?
2) Можно выделить набор возможных разделителей например из ASCII, разделитель 1 смивол? или неограниченное кол-во?
3) Одна и та же строка не обязательно понятна двум консультантам одинаково.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 11:41 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Если действительно интересует искусственный интеллект посмотрите тв сторону кластерного анализа (http://ru.wikipedia.org/wiki/%D0%9E%D0% ... 0%BB%D1%8F). Но ABAP по меньшей мере неудобен для реализации таких задач


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 12:01 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
LELUK написал(а):
То что задача во многих случаях не решаема - это очевидно.
Но если абстрагироваться и спуститься до уровня консультанта то:
1) Строка будет состоять из минимум 3 элементов - сл-но в строке будет как минимум 2 повторяющиеся под строки
2) Думаю разделительный элемент будет стандартный(; , или space)
3) Если нет то, будет отличаться по контексту.(Мы парсим не шифр, а понятную для консультанта строку)

По этому можно обработать большое кол-во частных вариантов, в ином случае выдавать сообщение об ошибке и тд.
Мне задача показалась интересной(своеобразное внедрение Иску. Интелекта в SAP :D )

Если я правильно понимаю, то собственно вам уже все рассказал __Gennady :

SPLIT dobj AT sep INTO { {result1 result2 ...} или {TABLE result_tab} }

где разделителем sep может быть не только один символ, но и любая строка, хоть 'Паду ли я, стрелой пронзенный,'.

Если же у вас в одной строке предполагается много различных разделителей ОДНОВРЕМЕННО, то вначале приведите их к одному посредством серии операций REPLACE. Этот один разделитель должен быть какой-нибудь заведомо не встречающейся - в тексте и разделителях - комбинацией символов, например, '-~|~-' или 'ЪЪЪ'.

Нужно будет грамотно задать порядок обработки разделителей для REPLACE, ориентируясь на их длину и содержание (более длинные, как правило, обрабатываются раньше, т.е. грубо говоря, чтобы строка '<<<<' была заменена раньше, чем '<<'). Если же разделители не пересекаются отдельными символами (например, просто состоят из одного символа), то это облегчает задачу - тогда порядок замены произволен.

После серии операций REPLACE делаете SPLIT во внутреннюю таблицу - и вуаля! Надеюсь, до искусственного интеллекта не дойдет. Максимум - может запахнуть регулярными выражениями. Но это в том случае, если разделители многосимвольные и критично пересекающиеся по отдельным символам.

Но может я, конечно, чего-то не понимаю... Разделители хоть известны заранее в каждом конкретном случае? :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 12:20 
Специалист
Специалист

Зарегистрирован:
Чт, фев 12 2009, 12:47
Сообщения: 117
Откуда: Kiev
Пол: Мужской
Вот есть пример с использованием регулярных выражений
http://entropii.net/?p=984

_________________
SAP macht frei


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 12:38 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
Gustav написал:
LELUK написал(а):
То что задача во многих случаях не решаема - это очевидно.
Но если абстрагироваться и спуститься до уровня консультанта то:
1) Строка будет состоять из минимум 3 элементов - сл-но в строке будет как минимум 2 повторяющиеся под строки
2) Думаю разделительный элемент будет стандартный(; , или space)
3) Если нет то, будет отличаться по контексту.(Мы парсим не шифр, а понятную для консультанта строку)

По этому можно обработать большое кол-во частных вариантов, в ином случае выдавать сообщение об ошибке и тд.
Мне задача показалась интересной(своеобразное внедрение Иску. Интелекта в SAP :D )

Если я правильно понимаю, то собственно вам уже все рассказал __Gennady :

SPLIT dobj AT sep INTO { {result1 result2 ...} или {TABLE result_tab} }

где разделителем sep может быть не только один символ, но и любая строка, хоть 'Паду ли я, стрелой пронзенный,'.

Если же у вас в одной строке предполагается много различных разделителей ОДНОВРЕМЕННО, то вначале приведите их к одному посредством серии операций REPLACE. Этот один разделитель должен быть какой-нибудь заведомо не встречающейся - в тексте и разделителях - комбинацией символов, например, '-~|~-' или 'ЪЪЪ'.

Нужно будет грамотно задать порядок обработки разделителей для REPLACE, ориентируясь на их длину и содержание (более длинные, как правило, обрабатываются раньше, т.е. грубо говоря, чтобы строка '<<<<' была заменена раньше, чем '<<'). Если же разделители не пересекаются отдельными символами (например, просто состоят из одного символа), то это облегчает задачу - тогда порядок замены произволен.

После серии операций REPLACE делаете SPLIT во внутреннюю таблицу - и вуаля! Надеюсь, до искусственного интеллекта не дойдет. Максимум - может запахнуть регулярными выражениями. Но это в том случае, если разделители многосимвольные и критично пересекающиеся по отдельным символам.

Но может я, конечно, чего-то не понимаю... Разделители хоть известны заранее в каждом конкретном случае? :)

Как разделить строчку зная разделитель, я умею уже пару лет :D Данная задача как раз и стоит в поиске разделителя


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 12:41 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
Korvax написал:
Искуственный интелект подразумевает наличие базы знаний..
1) Все элементы будут различны? Наличие пустого значения подразумевается? Наличие спец. символов в значениях (: ; / . , и т.д.)?
2) Можно выделить набор возможных разделителей например из ASCII, разделитель 1 смивол? или неограниченное кол-во?
3) Одна и та же строка не обязательно понятна двум консультантам одинаково.


Строчку вводит обычный человек(к примеру вы), в водит не так чтобы запутать а так как ему привычнее и понятнее.
Очень сомневаюсь что вы разделяете тестовые значения текстом а числовые числами. Спец символов в значениях исключено.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 12:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3076
Откуда: Москва
LELUK написал(а):
Строчку вводит обычный человек(к примеру вы), в водит не так чтобы запутать а так как ему привычнее и понятнее.

Если учесть, что обычно данные вводятся не одним человеком, а множеством людей, то правила ввода могут отличаться для каждого из них.
Кто-то вводит текст руками, а кто-то копирует из Office, к примеру ;)
И вот как раз в этом случае спецсимволы и полезут.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 13:00 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 489
Пол: Мужской
Все элементы будут различны?
Все разделители будут одинаковы?
Разделитель один символ или неограниченная строка?
Наличие пустого значения подразумевается?
А если один консультант напишет: "Стол Стул Диван Кровать", другой "Деревянный, железный , Мягкая мебель", то символ " " считать разделителем или ..?
т.е. еще надо выстроить приоритет в символах, что проверять на разделитель в первую очередь


Последний раз редактировалось Korvax Пт, фев 03 2012, 13:02, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 13:01 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
Забыл сказать: строка вводится 1 пользователем, обрабатывается и удаляется.
Нужна для реализации вставки из буфера в мульты выбор в гребаном WDP


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 13:11 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 489
Пол: Мужской
А еще интеллектуальная система учится на своих предыдущих действиях, поэтому в данном случае логично было бы сохранять найденные разделители, в случае успешной обработки, и искать в первую очередь их..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсим строку
СообщениеДобавлено: Пт, фев 03 2012, 13:42 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
LELUK, задача решается двумя путями:
1. Предусмотреть набор типичных разделителей и оперировать ими
2. Никак

Пытаться идти по пути номер 2 можно. Но сделать что-то "интеллектуальное" и работающее лучше пункта 1 - это из области фантастики.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB