SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Запись в <fs> c + i https://www.sapboard.ru/forum/viewtopic.php?f=13&t=96692 |
Страница 1 из 1 |
Автор: | santa-by [ Вт, авг 07 2018, 12:42 ] |
Заголовок сообщения: | Запись в <fs> c + i |
Добрый день, Подскажите, пожалуйста, что происходит в выделенной области? 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. Что подразумевается под "+" в данном случае? Заранее благодарю за ответ. |
Автор: | pberezin [ Вт, авг 07 2018, 15:43 ] |
Заголовок сообщения: | Re: Запись в <fs> c + i |
происходит корявый способ модификации строковых данных, засунутых в структуру, через указатель (field-symbol) 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. В документации по абап всё подробно с примерами разжёвано. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |