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

Часовой пояс: 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 часа


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

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


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

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