Текущее время: Вт, июл 22 2025, 22:55

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Разделение текстовой строки с переносом пробела
СообщениеДобавлено: Пт, июл 13 2007, 13:42 
Начинающий
Начинающий

Зарегистрирован:
Пт, июл 13 2007, 13:37
Сообщения: 3
Уважаемые коллеги!
Предлагаю Вам функциональный модуль для разделение текстовой строки с переносом пробела:

*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(LENGTH) TYPE CY_SPLIT
*" REFERENCE(TEXTLINE)
*" TABLES
*" OUT_TAB
*"----------------------------------------------------------------------
************************************************************************
**Данный функциональный модуль делит строку на несколько строк, по
**заданному количеству символов. Если на последний символ в строке при
**разделении приходится пробел, то он переносится на следующую строчку.

DATA: textline2 TYPE char255,
offset TYPE i,
dlstr TYPE i.

FIELD-SYMBOLS: <out>.

textline2 = textline.
*-- Убираем лишние пробелы
CONDENSE textline2.
*-- Определяем длину текстовой строки
dlstr = STRLEN( textline2 ).

WHILE dlstr <> 0.
*-- Берем символ из текстовой строки, пропустив кол-во указанное в
*-- offset
ASSIGN textline2+offset(1) TO <out>.
*-- Проверяем символ на пустоту
IF <out> EQ space.
*-- Если символ равен пусто, то переносим стоку длиной offset
ASSIGN textline2(offset) TO <out>.
ELSE.
*-- Если символ не равен пусто, то переносим стоку длиной length
ASSIGN textline2(length) TO <out>.
ENDIF.
*-- Добавляем данные в выходную таблицу
APPEND <out> TO out_tab.
*-- Высчитываем offset
offset = STRLEN( <out> ).
*-- Получаем остаток от строки
textline2 = textline2+offset(dlstr).
*-- Снова определяем длину текстовой строки
dlstr = STRLEN( textline2 ).
ENDWHILE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 14:09 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Ну что же, это очень грамотное и своевременное решение проблемы разделения текстовой строки с переносом пробела. Возможно, в будущем оно повлияет на изменение концепции всего программирования в целом, а также поможет увеличить ВВП нашей страны до требуемого уровня...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 14:23 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
а ввобще код надо оформлять в топике так


Code:
DATA: textline2 TYPE char255,
offset TYPE i,
dlstr TYPE i.

FIELD-SYMBOLS: <out>.

textline2 = textline.
*-- Убираем лишние пробелы
CONDENSE textline2.
*-- Определяем длину текстовой строки
dlstr = STRLEN( textline2 ).

WHILE dlstr <> 0.
*-- Берем символ из текстовой строки, пропустив кол-во указанное в
*-- offset
ASSIGN textline2+offset(1) TO <out>.
*-- Проверяем символ на пустоту
IF <out> EQ space.
*-- Если символ равен пусто, то переносим стоку длиной offset
ASSIGN textline2(offset) TO <out>.
ELSE.
*-- Если символ не равен пусто, то переносим стоку длиной length
ASSIGN textline2(length) TO <out>.
ENDIF.
*-- Добавляем данные в выходную таблицу
APPEND <out> TO out_tab.
*-- Высчитываем offset
offset = STRLEN( <out> ).
*-- Получаем остаток от строки
textline2 = textline2+offset(dlstr).
*-- Снова определяем длину текстовой строки
dlstr = STRLEN( textline2 ).
ENDWHILE.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Ничего смешного, полезная вещь, многим пригодится.
В SAP есть ф.м. RKD_WORD_WRAP. Точно не помню, но работает он, вроде бы, глючно.

Я даже когда-то предлагал такую задачу в качестве тестового задания.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 15:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
sibrin написал:
Ничего смешного, полезная вещь, многим пригодится.
Да абсолютно не вопрос, можно даже внести предложение на включение этого ФМ в стандартную поставку.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 16:00 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
А если между словом и запятой будет пробел, то запятая перенесется и будет стоять в начале строки?
Неаккуратненько, требую переделки ;-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 16:50 
Начинающий
Начинающий

Зарегистрирован:
Пт, июл 13 2007, 13:37
Сообщения: 3
John Doe написал:
sibrin написал:
Ничего смешного, полезная вещь, многим пригодится.
Да абсолютно не вопрос, можно даже внести предложение на включение этого ФМ в стандартную поставку.


Коллеги, мой функ.модуль на то и был размещен на форуме, для того чтобы услышать пожелания, замечания по нему. Обещаю в ближайшее время рассмотреть данное замечание.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 16:51 
Начинающий
Начинающий

Зарегистрирован:
Пт, июл 13 2007, 13:37
Сообщения: 3
vga написал(а):
А если между словом и запятой будет пробел, то запятая перенесется и будет стоять в начале строки?
Неаккуратненько, требую переделки ;-)


Коллеги, мой функ.модуль на то и был размещен на форуме, для того чтобы услышать пожелания, замечания по нему. Обещаю в ближайшее время рассмотреть данное замечание.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 16:58 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Дерзайте, коллега. В принципе можно эту проблему и шифтами туда-сюда порешать.


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

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

Она и должна перенестись на другую строку. Ничего другого и придумать нельзя.


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
sibrin написал:
Ничего смешного, полезная вещь, многим пригодится.
В SAP есть ф.м. RKD_WORD_WRAP. Точно не помню, но работает он, вроде бы, глючно.

Я даже когда-то предлагал такую задачу в качестве тестового задания.

Коллеги,
Есть стандартная функция FORMAT_TEXTLINES, которая вполне себе неплохо форматирует текст. Используется в SAPScript.
Извините, то, что предлагается - это очередной велосипед.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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