Текущее время: Ср, июл 23 2025, 09:05

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


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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