我需要一些关于在ITAB中将字符串转换为的帮助。
LOOP AT LT_0111_FILE INTO LV_STRING.
SPLIT LV_STRING AT ';' INTO TABLE LT_0111.
DO GV_COMP TIMES.
READ TABLE LT_0111 ASSIGNING <LV> INDEX SY-INDEX.
IF <LV> IS NOT INITIAL.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <STRUCT> TO <LV_COMP>.
IF <LV_COMP> IS ASSIGNED.
<LV_COMP> = <LV>.
ENDIF.
ENDIF.
ENDDO.
INSERT <STRUCT> INTO TABLE <TABLE>.
ENDLOOP.
在LT_0111_FILE中,表格PA 0111为带有分隔符“的字符串;“。现在我需要将该字符串表的每个字段分配到PA 0111结构的字段中。
我不想对每个字段单独执行此操作,因为字段将动态创建。
此代码适用于字符字段,但不适用于数字。在txt文件中,将存在诸如0,00之类的数字,将它们移动到结构的字段中将给予错误,因为数字必须为0.00。
谢谢你的帮助
2条答案
按热度按时间gjmwrych1#
当您有一个未知的结构,并且想知道它有哪些字段以及这些字段有哪些属性时,可以使用runtime type information类。
首先,获取目标结构的类型描述。
这里需要强制转换操作符
?=
,因为describe_by_data
的返回值是一个泛型cl_abap_typedescr
。* 您 * 知道它必须是一个结构,但类不知道这一点。它也可以是一个表、简单类型或对对象的引用。但如果您能保证它必须是一个结构,则可以将其上强制转换为cl_abap_structdescr
。现在你可以得到一个描述结构中所有字段的表:
这个表包含了这些组件的名称和类型,因此,您可以
LOOP AT
组件表并按名称使用ASSIGN COMPONENT
,而不是使用DO循环并按索引使用ASSIGN COMPONENT
,然后您可以根据类型处理每个字段:thtygnil2#
事实上我更喜欢飞利浦的解决方案,它在类型处理方面更防错和全面,但只是为了多样性,我会添加这个快速和肮脏的解决方案。
可以使用
cl_rsda_csv_converter
辅助类的方法: