kinderus написал(а):
Всем привет, задача такая, надо с помощью ABAP прочитать CSV файл с разделителями “;” и далее протащить его через XI в другую систему.
Как прочитать из CSV я знаю, уже сделано, но проблема друга, у меня есть выходящий интерфейс (proxy) через который я как раз и кидаю данные из своей ABAP проги (создаю там объект прокси и вызываю его метод передавая deep structure OUTPUT), у него (у этой deep structure OUTPUT) есть поле c типом xsd:double, я никак не могу преобразовать данные из CSV файла в эту deep structure , чтобы кинуть. Он ругается как раз на это поле, говорит следующее:
Myfield (допустим так называется мое поле) must be a character like data object (data type C, N, D, T or STRING) .
Дело в том что в файле значение которое должно передаваться в поле Myfield - вида 12345678,12345678 т.е. не целое и длиной может быть 16 символов и вот как его перевести в deep структуру прокси я не могу понять.
Буду признателен за помощь, спасибо.
Для наглядности вот алгоритм:
Я сначала создал внутреннюю табличку вот такого вида
TYPES: BEGIN OF mytype,
f1(14) TYPE C,
f2(24) TYPE C,
f3(9) TYPE C,
f4(6) TYPE C,
f5(4) TYPE N,
f6(5) TYPE N,
Myfield (8) TYPE F,
END OF mytype.
Потом засовываю в нее данные из CSV, все залезает нормально.
DATA: mylocaltable TYPE TABLE OF mytype WITH HEADER LINE.
...... засунул данные в локальную табличку
DATA: OUTPUT TYPE TABLE OF DEEP_STRUCTURE_TYPE WITH HEADER LINE.
DATA: deepstructure LIKE LINE OF OUTPUT-message_type-line.
LOOP AT mylocaltable.
MOVE-CORRESPONDING mylocaltable to deepstructure.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.
TRY.
CREATE OBJECT PROXY.
CALL METHOD PROXY->Message_Out
EXPORTING
OUTPUT = OUTPUT.
COMMIT WORK.
ENDTRY.
Ругаетя он как раз на цикл.
Строчка «MOVE-CORRESPONDING mylocaltable to deepstructure.»
Какого же типа мне надо сделать в локальной табличке поле Myfield ? или может как то надо преобразовать, просто в данном случае оно типа F и длиной 8 символов (больше нельзя), а это значит что теряется точность.
проблему решил след образом )))
1.
заменил
Myfield (8) TYPE F, на Myfield (16) TYPE С,
2.
заменил блок
LOOP AT mylocaltable.
MOVE-CORRESPONDING mylocaltable to deepstructure.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.
на
DATA: Float type F.
LOOP AT mylocaltable.
deepstructure-f1 = mylocaltable-f1.
deepstructure-f2 = mylocaltable-f2.
deepstructure-f3 = mylocaltable-f3.
deepstructure-f4 = mylocaltable-f4.
deepstructure-f5 = mylocaltable-f5.
deepstructure-f6 = mylocaltable-f6.
CALL FUNCTION 'CHAR_FLTP_CONVERSION'
EXPORTING
STRING = mylocaltable-Myfield
IMPORTING
FLSTR = Float
EXCEPTIONS
EXPONENT_TOO_BIG = 1
EXPONENT_TOO_SMALL = 2
STRING_NOT_FLTP = 3
TOO_MANY_DECIM = 4
OTHERS = 5.
deepstructure-Myfield = Float.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.
Спасибо за внимание ))).