abap read_text方法有时会读不出数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了abap read_text方法有时会读不出数据相关的知识,希望对你有一定的参考价值。
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID ='F02'
LANGUAGE ='1' "zh
NAME = name
OBJECT = 'EKPO'
TABLES
LINES = lines
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
OTHERS = 6.
使用上述方法测试发现如果文本中包含 ’&‘符号,此方法会读不出数据,有没有办法全部能读出来啊?
REPORT ztestlx1.
SELECTION-SCREEN BEGIN OF BLOCK bl01.
PARAMETER: p_ebeln LIKE ekpo-ebeln OBLIGATORY. "采购凭证号
PARAMETER: p_ebelp LIKE ekpo-ebelp OBLIGATORY. "采购凭证行项目号
SELECTION-SCREEN END OF BLOCK bl01.
DATA: tdname LIKE thead-tdname.
DATA: line1 LIKE TABLE OF tline WITH HEADER LINE.
DATA: txt2(120) TYPE c.
DATA: BEGIN OF line2 OCCURS 0,
value(120) TYPE c,
END OF line2.
CONCATENATE p_ebeln p_ebelp INTO tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'F02'
language = '1'
name = tdname
object = 'EKPO'
TABLES
lines = line1
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
* EXPORTING
* LANGUAGE = SY-LANGU
* LF = ' '
* IMPORTING
* STREAM_LINES =
TABLES
itf_text = line1
text_stream = line2
.
READ TABLE line2 INDEX 1.
txt2 = line2-value.
REFRESH line2.CLEAR line2.
ENDIF.
WRITE:/ txt2.追问
没有回答到点子上。
追答你的问题不就是有了&符号后数据显示为&"的形式吗?
如"测试&$特殊符号"显示为
"测试&$特殊符号"?你想让他正常显示?难道不是这个问题?
是的,&符号后数据显示为&",但是有的text里面有&符号时,就直接抓不出来这个text的。这个有办法解决吗?
追答那你的TEXT写的什么内容?
我上面列出的代码测试了TEXT中内容为“测试&$特殊符号”
是可以正常抓出数据的
甚至不加后面的那个FUNCTION,也能抓出"测试&$特殊符号"的数据,不存在你说抓不出来的问题。
是的,我也很奇怪,不过还是谢谢你。
参考技术B 建议通过将文件上传到服务器,通过open dataset,read dataset,close dataset语句来读取abap 开发中使用的函数read_text,怎么使用阿?
返回的内表里的记录是不是只有一条?
参考技术A DATA: BEGIN OF flines OCCURS 0.INCLUDE STRUCTURE tline.
DATA: END OF flines.
DATA: textname LIKE thead-tdname.
DATA: flines1(100) .
DATA: flines2(100) .
textname = i_vbe-vbelv ."变更格式
CALL FUNCTION 'READ_TEXT' " 抬头备注
EXPORTING
client = sy-mandt
language = '1'
id = '0001'
name = textname
object = 'VBBK'
TABLES
lines = flines " LIKE TLINE
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
referenc_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid
* TYPE sy-msgty
* NUMBER sy-msgno
* WITH sy-msgv1
* sy-msgv2
* sy-msgv3
* sy-msgv4.
ELSE.
* loop at flines.
* endloop.
ENDIF.
READ TABLE flines INDEX 1.
flines1 = flines-tdline.
READ TABLE flines INDEX 2.
flines2 = flines-tdline.
这是一个读了两行文本的例子,当然如果只有一行,第二个变量就是空值。
读出来的TEXT是一个内表,有可能有很多行,后面的自已想怎么处理都行 ,你读一个就知道了。追问
函数的输入参数如何指定:我是在LOOP循环里使用这个函数,所以希望通过这个函数得到一条记录,然后把这条记录连接成一个文本 再更新到内表 中?该如何传入参数?谢谢
追答传入参数主要是这三个:
id = '0001'
name = textname
object = 'VBBK'
其它的一般都不用改。
至于参数来源你可以在网上下个读文本信息的文档看一下,这个不是一两句话说的清楚的,
textname = i_vbe-vbelv 这个就是LOOP的一个表的单号,读出来的数据你用连接命令不就可以连成一条记录了.
我找了一个例子
程序名RSTXTCDG
代码:
CALL FUNCTION 'READ_TEXT'
EXPORTING OBJECT = SELECTIONS-TDOBJECT
NAME = SELECTIONS-TDNAME
ID = SELECTIONS-TDID
LANGUAGE = SELECTIONS-TDSPRAS
IMPORTING HEADER = THEAD
TABLES LINES = LINES
EXCEPTIONS OTHERS = 1.
具体参数的用法,你可以去程序里面看代码。
返回的内表里面行数跟文本行数有关,不止一行。 参考技术C 函数Read_Text来进行读取,以下是该函数的调用方法:
使用该函数时,首先要进行声明,然后给变量附上初始值,并给变量以实际的含义,最后调用该函数,以下是调用该函数的方法:
DATA: il_tline LIKE tline OCCURS 0 WITH HEADER LINE.
vl_tdname LIKE thead-tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'Z001'
language = '1'
name = vl_tdname
object = 'VBBK'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = il_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
以上是关于abap read_text方法有时会读不出数据的主要内容,如果未能解决你的问题,请参考以下文章