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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Удалить пробелы после запятых
СообщениеДобавлено: Пт, апр 28 2006, 13:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Можно ли элегантно и быстро удалить пробелы после запятых в текстовой строке?

replace all occurences of ', ' in text with ','.
отбрасывает пробел в конце паттерна.

Например, можно
SPLIT text at ', ' into table it_text.
который учитывет всю длину паттерна (неважно, литерал это или переменная). Но потом надо обратно склеивать...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: re
СообщениеДобавлено: Пт, апр 28 2006, 14:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
для компилятора ', ' и ',' одно и то же,
type x 2c20 тоже не спасает.. придется смириться с 4GL :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Удалить пробелы после запятых
СообщениеДобавлено: Пт, апр 28 2006, 14:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
sibrin написал:
Можно ли элегантно и быстро удалить пробелы после запятых в текстовой строке?

replace all occurences of ', ' in text with ','.
отбрасывает пробел в конце паттерна.

Например, можно
SPLIT text at ', ' into table it_text.
который учитывет всю длину паттерна (неважно, литерал это или переменная). Но потом надо обратно склеивать...


а так например:
Code:
TRANSLATE gc_txt USING ' *'.
REPLACE ALL OCCURRENCES OF ',*' IN gc_txt WITH ','.
TRANSLATE gc_txt using '* '.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: re
СообщениеДобавлено: Пт, апр 28 2006, 14:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
flipper хитер! :)
а я ошибался, все таки type x помогает в byte mode:

Code:
report .
data x(2) type x value '2C20'.
break-point.

field-symbols <1> type x.
sy-lisel = 'a, b, c, d, e, f'.
assign sy-lisel to <1> casting.

write: / sy-lisel.

replace all occurrences of x in <1> with x(1) in byte mode.

write: / sy-lisel.



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

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
trop написал(а):
flipper хитер! :)
а я ошибался, все таки type x помогает в byte mode:

;)
ваш вариант красивее!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: re
СообщениеДобавлено: Пт, апр 28 2006, 14:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
flipper написал(а):
ваш вариант красивее!

Тока в юникоде не пройдет, а вот со звездочкой скорее всего пройдет.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: ку
СообщениеДобавлено: Пт, апр 28 2006, 15:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
согласен, под юникод примерно так:
Code:
data x(4) type x value '002C0020'.
...
replace all occurrences of x in <1> with x(2) in byte mode.

но мы же иероглифы не используем :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 15:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Цитата:
для компилятора ', ' и ',' одно и то же,


Цитата из keyword documentation к split
DATA: NAMES(30) TYPE C VALUE 'Charly, John , Peter'.

SPLIT NAMES AT ',' INTO ONE TWO THREE.
* ONE contains 'Charly', TWO contains ' John',
* THREE contains ' Peter'.
SPLIT NAMES AT ', ' INTO ONE THREE TWO.
* ONE contains 'Charly', THREE contains 'John',
* TWO contains 'Peter'.

Цитата:
Тока в юникоде не пройдет, а вот со звездочкой скорее всего пройдет.

Со звёздочкой не спортивно, т.к. в исходной строке уже могут быть *.

Да уж, семь бед, один ответ:
assign ... casting


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 16:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Цитата:
а я ошибался, все таки type x помогает в byte mode:


Только пример, который привёл trop, немножко неправильный.
sy-lisel очень длинная и на экране не видно, что после замены
справа строка дополняется не пробелами, а нулями.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 16:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Наверное, всё-таки split - наиболее корректое решение:

Code:
 
  DATA: it_txt TYPE TABLE OF char1024
          , txt(60) value 'a, b, c, d, e, f'
  .
  field-symbols: <txt> like line of it_txt.

  split txt at ', ' into table it_txt.
  loop at it_txt assigning <txt>.
    if sy-tabix = 1.
       txt = <txt>.
    else.
       concatenate txt ',' <txt> into txt.
    endif.
  endloop.


Как всё-таки увлекательно писать на ABAP то, что в perl, например, реализуется так:
Code:
txt=~s/, /,/g


Может какой-нибудь ф.м. существует, реализующий regexp'ы?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 16:35 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Тогда уж
Code:
txt=~s/,\s+/,/g

Если ввод пользователя - пробелов может быть сколько угодно.
А в абапе перед заменой надо сделать
Code:
condence text.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: ку
СообщениеДобавлено: Пт, апр 28 2006, 16:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
вообще есть мыслишка портировать класс или формы posix regex


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 16:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Цитата:
А в абапе перед заменой надо сделать


Ну да, это от постановки задачи зависит, т.к. condense поубивает двойные пробелы не только после запятых, а с другой стороны, ему пофиг табуляции (ведь \s это [\ \t\r\n\f...]).

А чтобы реализовать txt=~s/([,;.:])\s+/$1/g на абапе, это же нужно ещё три цикла что-ли навесить: один будет перебирать [,;:.], второй [\ \t\r\n\f], а третий - чтобы последовательно убивать пробельные символы после знака пунктуации по-одному.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 28 2006, 17:56 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
sibrin написал:
Может какой-нибудь ф.м. существует, реализующий regexp'ы?

ФМ не ФМ, а кое-что есть. Правда, в NetWeaver.


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

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Хачу ;)
У кого-нибудь есть доступ к 2004s ? в 2004 такого нету CL_ABAP_REGEX and CL_ABAP_MATCHER.
Скиньте плиз на мыло bogatyrjov[dog]bk.ru


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

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


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

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


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

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