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

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


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

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


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

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