如何读取以二进制形式传输的文本文件

时间:2010-10-24 14:40:48

标签: file-io axapta x++

我的代码将文件从ftp(使用文本传输模式)复制到本地磁盘,然后尝试处理它们。 所有文件仅包含文本,值使用新行分隔。有时使用二进制传输模式将文件移动到此ftp,看起来这样会破坏行尾。 使用十六进制编辑器,我根据用于将文件发送到ftp的传输模式比较行结束: 使用文本模式:文件结尾为0D 0A 使用二进制模式:文件结尾为0D 0D 0A

是否可以修改我的代码,以便在两种情况下都可以读取文件? 来自作业的代码说明我的问题,并显示我如何阅读文件: (这里我使用相同的文件,包含14行数据)

int         i;
container   con;
container   files = ["c:\\temp\\axa_keio\\ascii.txt", "c:\\temp\\axa_keio\\binary.txt"];

boolean     purchLineFirstRow;
IO          inFile;
;
for(i=1; i<=conlen(files); i++)
{
    inFile = new AsciiIO(conpeek(files,i), "R");
    inFile.inFieldDelimiter('\n');

    con = inFile.read();
    info(int2str(conlen(con)));
}

文件来自Unix系统到Windows系统。 不确定但也许问题可能是:“我应该使用哪个inFieldDelimiter值来读取Unix和Windows行结束?”

1 个答案:

答案 0 :(得分:0)

使用inRecordDelimiter

inFile.inRecordDelimiter('\n');

而不是:

inFile.inFieldDelimiter('\n');

最后一个字段可能仍然存在悬空CR,您可能希望将其删除:

strRem(conpeek(con, conlen(con)), '\r')

另请参阅:http://en.wikipedia.org/wiki/Line_endings