Текущее время: Пт, июл 18 2025, 05:14

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 15:05 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 17 2014, 14:57
Сообщения: 5
Необходимо вырезать слово между символами { }. Причем таких слов в строке может быть несколько, и строка может быть любая. Например,
txt = ` {BODY} ` или txt = `12asd{HEAD}1a {BODY}asd`
Пробовала сделать с помощью регулярных выражений, но получилось вырезать, если строка с пробелами (txt = ` {BODY} `)
Как можно такое реализовать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 16:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Как пример:
Code:
  WHILE sy-subrc = 0 AND p_str IS NOT INITIAL.
    SEARCH p_str FOR '{' IN CHARACTER MODE.
    CHECK sy-subrc = 0.
    lv_start = sy-fdpos - 1. "Если требуется удалять кавычки
    SEARCH p_str FOR '}' IN CHARACTER MODE.
    CHECK sy-subrc = 0.
    lv_end = sy-fdpos + 1. "Если требуется удалять кавычки
    lv_str = lv_str && p_str(lv_start).
    p_str = p_str+lv_end.
  ENDWHILE.
  IF p_str IS NOT INITIAL.
    lv_str = lv_str && p_str.
  ENDIF.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 16:48 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 17 2014, 14:57
Сообщения: 5
Удав написал(а):
Как пример:
Code:
  WHILE sy-subrc = 0 AND p_str IS NOT INITIAL.
    SEARCH p_str FOR '{' IN CHARACTER MODE.
    CHECK sy-subrc = 0.
    lv_start = sy-fdpos - 1. "Если требуется удалять кавычки
    SEARCH p_str FOR '}' IN CHARACTER MODE.
    CHECK sy-subrc = 0.
    lv_end = sy-fdpos + 1. "Если требуется удалять кавычки
    lv_str = lv_str && p_str(lv_start).
    p_str = p_str+lv_end.
  ENDWHILE.
  IF p_str IS NOT INITIAL.
    lv_str = lv_str && p_str.
  ENDIF.


Спасибо большое!
Но проблема еще в том, что && со строками в моей системе не работает


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 17:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Code:
data text type string.
text = your_text_variable.  " при работе с regex лучше преобразов. предвар. в string
replace all occurrences of regex `\{[^\}]+\}` in text with ``.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 17:22 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 17 2014, 14:57
Сообщения: 5
trop написал(а):
Code:
data text type string.
text = your_text_variable.  " при работе с regex лучше преобразов. предвар. в string
replace all occurrences of regex `\{[^\}]+\}` in text with ``.

Спасибо большое!=) работает! только мне нужно получить слова, которые в скобках и отдельно, а не одной строкой


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 17:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
toshka1993 написал(а):
Но проблема еще в том, что && со строками в моей системе не работает

Используйте оператор CONCATENATE.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Чт, июл 17 2014, 17:45 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 17 2014, 14:57
Сообщения: 5
Удав написал(а):
toshka1993 написал(а):
Но проблема еще в том, что && со строками в моей системе не работает

Используйте оператор CONCATENATE.

спасибо=)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Пт, июл 18 2014, 18:58 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
toshka1993 написал(а):
мне нужно получить слова, которые в скобках и отдельно, а не одной строкой

Code:
DATA txt        TYPE string.
DATA it_matches TYPE match_result_tab.
DATA wa_matches LIKE LINE OF it_matches.
DATA it_subs    TYPE submatch_result_tab.
DATA wa_subs    LIKE LINE OF it_subs.

START-OF-SELECTION.

  txt = `12asd{HEAD}1a {BODY} asd  { BODY BUILDER} `.

  FIND ALL OCCURRENCES OF REGEX '\{([^\{]+)\}' IN txt RESULTS it_matches.

  LOOP AT it_matches INTO wa_matches.
    WRITE: / txt+wa_matches-offset(wa_matches-length).
    it_subs = wa_matches-submatches.
    LOOP AT it_subs INTO wa_subs.
      WRITE: txt+wa_subs-offset(wa_subs-length).
    ENDLOOP.
  ENDLOOP.

{HEAD} HEAD
{BODY} BODY
{ BODY BUILDER} BODY BUILDER


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Пн, июл 21 2014, 17:32 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 17 2014, 14:57
Сообщения: 5
Gustav написал:
toshka1993 написал(а):
мне нужно получить слова, которые в скобках и отдельно, а не одной строкой

Code:
DATA txt        TYPE string.
DATA it_matches TYPE match_result_tab.
DATA wa_matches LIKE LINE OF it_matches.
DATA it_subs    TYPE submatch_result_tab.
DATA wa_subs    LIKE LINE OF it_subs.

START-OF-SELECTION.

  txt = `12asd{HEAD}1a {BODY} asd  { BODY BUILDER} `.

  FIND ALL OCCURRENCES OF REGEX '\{([^\{]+)\}' IN txt RESULTS it_matches.

  LOOP AT it_matches INTO wa_matches.
    WRITE: / txt+wa_matches-offset(wa_matches-length).
    it_subs = wa_matches-submatches.
    LOOP AT it_subs INTO wa_subs.
      WRITE: txt+wa_subs-offset(wa_subs-length).
    ENDLOOP.
  ENDLOOP.

{HEAD} HEAD
{BODY} BODY
{ BODY BUILDER} BODY BUILDER


спасибо большое!=) то, что нужно!=)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вырезать текст между символами { }
СообщениеДобавлено: Вт, июл 22 2014, 05:05 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, июл 23 2013, 17:41
Сообщения: 36
Пол: Мужской
Один из многих вариантов, как это можно сделать:
Code:
DATA : lt_substr  TYPE STANDARD TABLE OF string,
       lv_sym1(1)             VALUE '{',
       lv_sym2(1)             VALUE '}',
       ls_str     TYPE string VALUE '12asd{HEAD}1a {BODY}asd'.

FIELD-SYMBOLS :
       <ls_substr> LIKE LINE OF lt_substr.
" Делим строку так чтобы начало нужной подстроки попало в начало отдельной строки
" Строка распилена в отдельную таблицу lt_substr
SPLIT ls_str AT lv_sym1 INTO TABLE lt_substr.
" Разбираем таблицу построчно
LOOP AT lt_substr ASSIGNING <ls_substr>.
  SEARCH <ls_substr> FOR lv_sym2.           "Ищем в строке закрывающий символ
  IF sy-subrc NE 0.                         "1. Если не найден
    DELETE lt_substr INDEX sy-tabix.        " Удаляем строку
    sy-tabix = sy-tabix - 1.                " Смещаем индекс
                                            "/ не хорошо изменять напрямую sy-tabix
                                            " - лучше переложить в свою переменную
  ELSE.
    <ls_substr> = <ls_substr>+0(sy-fdpos).  "2. Если найден перекладываем в строку
                                            " только тот кусок строки что нам нужен
                                            " sy-fdpos хранит позицию найденого символа
  ENDIF.
ENDLOOP.

_________________
- Хочу выучить весь SAP
- А ты не лопнешь деточка???


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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