如何在SAP中读取混合行结尾的ASCII文件(Windows和Unix)和UTF-16大端文件?
背景:我们的ABAP应用程序必须读取一些配置文件。其中大多数是ASCII文件(普通文本文件),一个是Unicode Big Endian文件。到目前为止,文件是使用ASCII模式读取的,在我们的测试中一切正常。
但是,在客户端发生了以下情况:配置文件位于Linux终端上,因此它具有Unix行结尾。人们通过FTP或类似的方式读取配置文件,并将其传输到Windows机器。在Windows机器上,它们会调整一些设置。根据编辑器的不同,我们的客户现在使用混合行结尾。
在ABAP中以ASCII模式读取文件时,这些混合行结尾会导致麻烦。文件被读取到行结尾改变的地方,再加上一点,但不是整个文件。
我建议以二进制模式读取文件,删除所有CR,然后用CR LF替换所有剩余的LF。这种方法工作得很好——除了UTF-16 BE文件之外,这种方法会导致混乱。所以整件事被还原了。
我不是ABAP开发人员,我只需要测试这个。以我在其他编程语言方面的背景,我必须假设有一个解决方案,我倾向于拒绝这个错误的"不能修复"的解决方案。
您可以使用CL_ABAP_FILE_UTILITIES=>CHECK_FOR_BOM
来确定文件具有哪种编码,然后使用CL_ABAP_CHAR_UTILITIES
类的常量进行进一步处理。