Текущее время: Чт, мар 28 2024, 12:14

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Запись в <fs> c + i
СообщениеДобавлено: Вт, авг 07 2018, 12:42 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2018, 12:09
Сообщения: 1
Добрый день,

Подскажите, пожалуйста, что происходит в выделенной области?

REPORT demo_field_symbols_stat_as_of2 .

FIELD-SYMBOLS <fs> TYPE ANY.

DATA: BEGIN OF line,
a TYPE c VALUE '1', b TYPE c VALUE '2',
c TYPE c VALUE '3', d TYPE c VALUE '4',
e TYPE c VALUE '5', f TYPE c VALUE '6',
g TYPE c VALUE '7', h TYPE c VALUE '8',
END OF line,
off TYPE i,
len TYPE i VALUE 2.

DO 2 TIMES.
off = sy-index * 3.
ASSIGN line-a+off(len) TO <fs>
<fs> = 'XX'.
ENDDO.

DO 8 TIMES.
off = sy-index - 1.
ASSIGN line-a+off(1) TO <fs>.
WRITE <fs>.
ENDDO.

Почему в процессе первого цикла после первого прохождения <fs> = 45, потом ему присваивается 'ХХ', а после второго он уже равен 78 (потом ему снова присваивается 'ХХ')? line-a - поле с типом char, off - переменная с типом i. Что подразумевается под "+" в данном случае? Заранее благодарю за ответ.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Запись в <fs> c + i
СообщениеДобавлено: Вт, авг 07 2018, 15:43 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
происходит корявый способ модификации строковых данных, засунутых в структуру, через указатель (field-symbol) :D

ASSIGN line-a+off(len) TO <fs>
значит отсчитай от места, где в памяти хранится содержимое переменной line-a смещение равное off символов (байтов), с указанной позиции возьми len=2 символов (байтов) и присвой ссылку на эти байты в указатель <fs>.
соответственно, следующей строкой оно пихает в это место 2 символа 'XX'.

Если взять аналог на VBA
то выполняется аналог присвоения в середину строки Mid(line-a, off+1, len) = 'XX' только не напрямую, а через указатель. Здесь off+1 потому что в VBA отсчёт от начала строки идёт с единицы, а в абапе смещение всегда от нуля. Т.е. line-a+0(2) = первые два символа строки line-a, line-a+1(2) = второй и третий символ строки line-a.

В документации по абап всё подробно с примерами разжёвано.


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

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


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

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


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

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