SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

ФМ для замены по маске



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Максим
Специалист
Специалист



Joined: 27 Sep 2007
Posts: 61

PostPosted: Mon Feb 04, 2008 10:19 am    Post subject: ФМ для замены по маске Reply with quote

Привет,
нужно сделать замену в строке, например:

Quote:
'Для получения информации перейдите по ссылке <a href=http://www.ya.ru>Яндекс</a>'.


Заменить <a href=*</a> на 'www.ya.ru'.

Такое возможно в 4.7 без регулярных выражений?
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 46
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Mon Feb 04, 2008 11:44 am    Post subject: Reply with quote

Я, к сожалению не знаю что-такое регулярные выражения...
Возможно, что Replacements in Character Strings поможет в решении проблемы...
Back to top
View user's profile Send private message Blog
vga
Мастер
Мастер


Age: 190
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Mon Feb 04, 2008 4:42 pm    Post subject: Reply with quote

В 4.7 наверно регулярных выражений еще нет.
Можете сами написать небольшой код по такому алгоритму:
1) Найти начало pattern c использованием IF xxx CP yyy.
sy-fdpos - начало подстроки в строке, подпадающее под pattern.
beg = sy-fdpos.

2) Посимвольный проход, сравнивая оригинальную подстроку, начиная с позиции beg c pattern, исключая '*' и '+' для нахождения последней позиции подстроки.

end - позиция конца подстроки.
len = end - beg.

3) REPLACE str+beg(len) WITH <на что меняем> IN str.

Вечером напишу код.
Back to top
View user's profile Send private message Blog Visit poster's website
vga
Мастер
Мастер


Age: 190
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Tue Feb 05, 2008 11:52 pm    Post subject: Reply with quote

Без претензий на оптимальность, примерно так:

Code:

DATA: I_PATTERN(100)     TYPE  C,
      I_REPL_STRING(100) TYPE  C,
      X_STRING(100) TYPE  C.

I_PATTERN = '<a href=*</a>'.
*I_PATTERN = '<a href="+++.*.ru">*</a>'.
*I_PATTERN = '<*>'.
I_REPL_STRING = '<ссылка запрещена>'.
X_STRING = 'Лучший поисковик <a href="www.yandex.ru">yandex.ru</a>' &
           ' в России'.

DATA: begin_offset      TYPE SY-FDPOS,
      len               TYPE I,
      len2              TYPE I,
      of1               TYPE SY-FDPOS,
      of2               TYPE SY-FDPOS,
      ch1               TYPE C,
      ch2               TYPE C,
      pat(100)          TYPE C.

WRITE:/ 'Old string=', X_STRING.

CONCATENATE '*' I_PATTERN '*' INTO pat.
IF X_STRING CP pat.
  pat = I_PATTERN.
  len = STRLEN( I_PATTERN ) - 1.
  IF I_PATTERN+len NE '*'.
    CONCATENATE pat '*' INTO pat.
  ENDIF.
  begin_offset = SY-FDPOS.
  of1          = begin_offset.
  of2          = 0.
  len = STRLEN( X_STRING ).
  len2 = STRLEN( I_PATTERN ).
  WHILE of1 < len AND of2 < len2.
    ch1 = X_STRING+of1.
    ch2 = pat+of2.
    IF ch2 = '*' OR ch2 = '+'.
      IF X_STRING+of1(*) NP pat+of2(*).
        IF ch2 = '*'.
          of2 = of2 + 3.
        ELSE.
          of2 = of2 + 1.
        ENDIF.
      ENDIF.
    ELSE.
      of2 = of2 + 1.
    ENDIF.
    IF of2 <= len2.
      of1 = of1 + 1.
    ENDIF.
  ENDWHILE.
  len = of1 - begin_offset.
  len2 = STRLEN( I_REPL_STRING ).
  REPLACE X_STRING+begin_offset(len) WITH I_REPL_STRING(len2)
    INTO X_STRING.
ENDIF.
WRITE:/ 'New string=', X_STRING.
Back to top
View user's profile Send private message Blog Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.