0

私のコードは、(テキスト転送モードを使用して) ftp からローカル ディスクにファイルをコピーし、それらを処理しようとします。すべてのファイルにはテキストのみが含まれ、値は改行で区切られます。バイナリ転送モードを使用してファイルがこの ftp に移動されることがありますが、これにより行末が台無しになるようです。16 進エディタを使用して、ファイルを 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 システムに送られます。確かではありませんが、「Unix と Windows の両方の行末を読み取るには、どの inFieldDelimiter 値を使用すればよいですか?」という質問が考えられます。

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 に答える