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
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Tue Apr 20, 2010 5:52 pm    Post subject: выделить число среди букв Reply with quote

Добрый день, как мне пропарсить строку типа:

"Тут был я (когда - 21 января)"
или
"Тут был я (когда - 331 января)"
или
"Тут был я (когда - 55 января)"

как мне с этой строки получить число "21", "331", "55" Question


Last edited by Sed0Y on Tue Apr 20, 2010 7:19 pm; edited 1 time in total
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Apr 20, 2010 6:01 pm    Post subject: Reply with quote

Если число произвольное, то наверное только перебором всех символов.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Tue Apr 20, 2010 6:10 pm    Post subject: Reply with quote

XXX_:) wrote:
Если число произвольное, то наверное только перебором всех символов.


да, тут может быть любое целое - число
может кто-то уже с таким сталкивался и у него имеется реализация?

Заранее благодарствую...
Back to top
View user's profile Send private message
Alex80
Старший специалист
Старший специалист


Age: 43
Joined: 24 Jan 2008
Posts: 129

PostPosted: Wed Apr 21, 2010 9:09 am    Post subject: Reply with quote

Code:
DATA gv_string TYPE string VALUE 'qweqe sfd 34 wer 324'.
REPLACE ALL OCCURRENCES OF REGEX '\D' IN gv_string WITH space.
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


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

PostPosted: Wed Apr 21, 2010 9:49 am    Post subject: Reply with quote

И еще вариант:
Code:
DATA: text1 TYPE string VALUE 'Тут был я (когда - 21 января)',
      text2 TYPE string VALUE 'Тут был я (когда - 331 января)',
      text3 TYPE string VALUE 'Тут был я (когда - 55 января)'.
DATA: text_tab TYPE TABLE OF string,
      result_tab TYPE TABLE OF int2 WITH HEADER LINE.

START-OF-SELECTION.
  PERFORM find_digits USING: text1, text2, text3.

  LOOP AT result_tab.
    WRITE / result_tab.
  ENDLOOP.

FORM find_digits USING text TYPE string.
  SPLIT text AT space INTO TABLE text_tab.
  REPLACE ALL OCCURRENCES OF REGEX:
      '[ [:punct:] ]' IN TABLE text_tab WITH '',
      '[ [:alpha:] ]' IN TABLE text_tab WITH '',
      '[ [:blank:] ]' IN TABLE text_tab WITH '',
      '[ [:space:] ]' IN TABLE text_tab WITH ''.
  DELETE text_tab WHERE table_line IS INITIAL.
  APPEND LINES OF text_tab TO result_tab.
ENDFORM.                       
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Wed Apr 21, 2010 11:33 am    Post subject: Reply with quote

Мне конечно до гуру далеко. Когда говорил про перебор думал не только о целых...да и точка после числа в конце предложения... свое корявое детище тоже выложу
Code:

DATA: text1 TYPE string  VALUE 'Тут был я (когда - 21. января)',
      text2 TYPE string  VALUE 'Тут был я (когда - 33,1 января)',
      text3 TYPE string  VALUE 'Тут был я (когда - 55.6 января)'.
DATA: text_tab TYPE TABLE OF string WITH HEADER LINE,
      result_tab TYPE TABLE OF string WITH HEADER LINE.

START-OF-SELECTION.

  PERFORM find_digits USING: text1, text2, text3.

  LOOP AT result_tab.
    WRITE / result_tab.
  ENDLOOP.

FORM find_digits USING text TYPE string.

  DATA:  l_text(1000)
            ,l_temp(100)
            ,l_char(1)
            ,l_endsymbol type i.

  SPLIT text AT space INTO TABLE text_tab.

  LOOP AT text_tab.

    CLEAR l_temp.
    l_text = text_tab.

    DO .

      IF l_text(1) CO '1234567890,.'.
        CONCATENATE l_temp l_text(1) INTO l_temp.
      ELSEIF l_temp IS INITIAL.   "не число
        EXIT.
      ELSEIF l_temp IS NOT INITIAL.
        IF l_char CO '.,'.        "Удалить последний символ.
          l_endsymbol = strlen( l_temp ) - 1.
          CLEAR: l_temp+l_endsymbol(1).
        ENDIF.
        APPEND l_temp TO result_tab.
        EXIT.
      ENDIF.

      l_char = l_text(1).
      SHIFT l_text BY 1 PLACES LEFT.

    ENDDO.

  ENDLOOP.

ENDFORM.                    "find_digits

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Wed Apr 21, 2010 12:00 pm    Post subject: Reply with quote

Прошу прощение, что сразу не уточнил,
а как вывести цифры которые в скобках
"Тут был я 10 раз (когда - 21. января)"

что бы вывело 21?
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Wed Apr 21, 2010 12:13 pm    Post subject: Reply with quote

максимально уточните какой будет формат поданной строки.

если как сейчас "Тут был я 10 раз (когда - 21. января)", то нужно отбросить из строки поиска, все что находится вне скобок и повторить то что написано выше. Как слева убрать лишнюю подстроку то вы наверное знаете? (Если нет, читаем книжку для начинающих на русском языке "Разработка приложений SAP R3 на языке ABAP4" Рюдигер Кречмер или "Программиование на языке ABAP")

ЗЫ: или брать только второе число ))).

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Wed Apr 21, 2010 1:34 pm    Post subject: Reply with quote

Все, всем большое спасибо особенно XXX_ за оказанную помощь - очень помогли!
Back to top
View user's profile Send private message
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Wed Apr 21, 2010 3:28 pm    Post subject: Reply with quote

Есть порблема, это функция мне нужна в расчете смартформе, а там пишет что не хочет работать с "WITH HEADER LINE"

можно как то без них?
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Wed Apr 21, 2010 3:55 pm    Post subject: Reply with quote

Code:

data:  it_tab   TYPE TABLE OF string
         ,wa_tab TYPE  string.
loop at it_tab into wa_tab.
...
endloop.

Надеюсь понятно. Вы совсем с языком не знакомы Sad. Прочитайте книжки, курсы...

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Sed0Y
Специалист
Специалист


Age: 41
Joined: 17 Mar 2010
Posts: 88
Location: Ukraine - Kiev

PostPosted: Thu Apr 22, 2010 11:29 am    Post subject: Reply with quote

XXX_:) wrote:
Code:

data:  it_tab   TYPE TABLE OF string
         ,wa_tab TYPE  string.
loop at it_tab into wa_tab.
...
endloop.

Надеюсь понятно. Вы совсем с языком не знакомы Sad. Прочитайте книжки, курсы...


Большое спасибо.
Да, я начинающий, читаю....
Просто спросил не подумав...
Back to top
View user's profile Send private message
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.