2010-03-27 38 views
0

我需要读取一个文件,它有一个“n”行数,我需要知道什么时候读取每行的结尾,所以我可以将行存储在一个数组中,确定目前为止我有adobe air stream end on line(EOF)

while(stream.position < stream.bytesAvailable) 
    { 
     char = stream.readUTFBytes(1); 
     if(char == "\n") 
     { 
      array.push(line); 
      line = ""; 
     } 
     else 
     { 
      line += char; 
     } 
    } 

我的问题是,总是行结束会是“\ n”??我怎么能确定,如果不是像\ r ??这样的其他字符,还有其他字符用于行结尾??,感谢任何帮助!

回答

0

由于您正在读取整个流,将其放入内存中,为什么不将它加载到一个字符串中,然后将该字符串拆分成当前的行。您可以先测试字符串\ n或\ r或\ r \ n的组合(您应该首先测试)。

例如,在myFileString是你所读的内容:

var lineEnding = ''; // String var for storing line ending char or char combo 
var lines = []; // Array var for storing the lines of the string 

if (myFileString.match('\r\n') { 
    lineEnding = '\r\n'; 
} else if (myFileString.match('\r') { 
    lineEnding = '\r'; 
} else if (myFileString.match('\n') { 
    lineEnding = '\n'; 
} 

if (lineEnding != '') { 
    lines = myFileString.split(lineEnding); // here are your lines 
} else { 
    lines[0] = myFileString; // it's one line 
} 
2

怎么是这样的:

var lines:Array = stream.readUTF().split('\r\n').join('\n').split('\n'); 

它从文件中读取整个字符串,在Windows上则首先拆分行尾,用unix行结尾替换它们。然后再在unix行尾分割。结果应该是一个包含所有行的数组...

+0

您的解决方案比我的更优雅(我详细说明涉及的概念更简单),所以我给了+1。请注意,它不会从\ pre-OS X Mac中找到行尾。只是注意到如果这是一个问题,可以重写你的意见。 – Robusto 2010-03-28 12:29:12