adobe air stream end on line(EOF)

时间:2010-03-27 23:35:03

标签: flex actionscript-3 air

我需要读取一个行数为“n”的文件,我需要知道读取每行的结尾,所以我可以将行存储在一个数组中,好吧到目前为止我已经

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

我的问题是,总是行尾会是“\ n”吗?我怎么能确定是否不是像\ r ??这样的其他角色,还有另一个字符用于行尾?,感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

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

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

答案 1 :(得分: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
}