2010-10-24 66 views
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行結束符?」

+0

您可以指定是否要從Windows,Linux,BSD或任何一方操作系統?線路終端是操作系統特定的,並且在文本模式下,FTP執行的翻譯不是在二進制模式下完成的。 – 2010-10-24 15:38:52

+0

文件來自Unix系統到Windows。 – Keios 2010-10-25 10:33:31

回答

0

使用inRecordDelimiter

inFile.inRecordDelimiter('\n'); 

代替:

inFile.inFieldDelimiter('\n'); 

仍有可能在最後一欄懸空CR,您可能希望刪除此:

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

見還有:http://en.wikipedia.org/wiki/Line_endings