Adobe Air Stream End On Line (EOF)

Мне нужно прочитать файл, который имеет "n" количество строк, мне нужно знать при чтении конец каждой строки, чтобы я мог сохранить строку в массиве, пока у меня есть

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

мой вопрос, всегда конец строки будет "\n"?? как я могу быть уверен, что это не другой символ, например \r??, есть другой символ для конца строки??, спасибо за любую помощь!!!


person goseta    schedule 27.03.2010    source источник


Ответы (2)


Как насчет такого:

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

Он читает всю строку из файла, а затем сначала разбивает окончания строк Windows, заменяя их окончаниями строк unix. Затем он снова разбивается на окончания строк unix. В результате должен получиться массив, содержащий все строки...

person vitch    schedule 28.03.2010
comment
Ваше решение более элегантно, чем мое (которое я сделал подробным, чтобы проще проиллюстрировать задействованные концепции), поэтому я поставил ему +1. Обратите внимание, что он не найдет окончания строк на компьютерах Mac до OS X, которые являются \r. Просто отметим, что ваш можно было бы переписать, чтобы включить это, если бы это было проблемой. - person Robusto; 28.03.2010

Поскольку вы все равно читаете весь поток, помещая его в память, почему бы просто не загрузить его в строку, а затем разбить строку на строки в этой точке. Вы можете сначала проверить строку на \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
}
person Robusto    schedule 27.03.2010