Текущее время: Чт, апр 18 2024, 07:45

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


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

Сейчас этот форум просматривают: Google [Bot], Mail.RU Bot


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

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