0

我的代码将文件从 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 行结束?”

4

1 回答 1

0

使用inRecordDelimiter

inFile.inRecordDelimiter('\n');

代替:

inFile.inFieldDelimiter('\n');

最后一个字段可能仍然有一个悬空的 CR,您可能希望删除它:

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

另见:http ://en.wikipedia.org/wiki/Line_endings

于 2010-11-18T07:33:34.940 回答