Чтение текстового файла по строкам и нажатие на массив в AS3

Мне нужен код в AS3, который будет читать текстовый файл по строкам и вставлять его в массив. Возможно ли это без специального символа?

sample.txt

    car
    van
    scooter
    bike

Мне нужно прочитать файл и вставить его в массив вроде:

Array[0]=car
Array[1]=van
Array[2]=scooter
Array[3]=bike

Ответ 1

Что-то вроде этого может работать:

var myTextLoader:URLLoader = new URLLoader();

myTextLoader.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event):void {
    var myArrayOfLines:Array = e.target.data.split(/\n/);
}

myTextLoader.load(new URLRequest("myText.txt"));

Массив в функции onLoaded будет иметь ваш массив элементов.

Edit- for fun, я запустил код с образцом, и он работал как шарм.

Ответ 2

Ниже приведен пример загрузки и чтения различных типов файлов с помощью ActionScript 3:

      import flash.filesystem.FileMode;
      import flash.filesystem.FileStream;
      import flash.filesystem.File;

      var myFile:File = File.appResourceDirectory; // Create out file object and tell our File Object where to look for the file
      myFile = myFile.resolve("mySampleFile.txt"); // Point it to an actual file

      var fileStream:FileStream = new FileStream(); // Create our file stream
      fileStream.open(myFile, FileMode.READ);

      var fileContents:String = fileStream.readUTFBytes(fileStream.bytesAvailable); // Read the contens of the 
      fileContents_txt.text = fileContents; // Display the contents. I've created a TextArea on the stage for display

      fileStream.close(); // Clean up and close the file stream

После прочтения строки вы можете использовать int.valueOf() для преобразования строки в целое число.

Ответ 3

hmmm, немного странно использовать пространство в качестве разделителя. Я имею в виду, вы могли бы сделать это следующим образом:

var result:Array = [];
for each (var s:String in source.split(" ")) {
     var a:Array = s.split("=");
     result[a[0]] = a[1];
}

но полагаясь на "" для расщепления, на самом деле это не такая хорошая идея, не можете ли вы использовать JSON, CSV или XML?

Ответ 4

Это будет работать для небольших файлов, а не для таких больших файлов, как файлы брандмауэра или веб-сервера.

Эти файлы не будут полностью загружаться в память.

Есть ли решение для 1/прочитайте файл, пока не встретите конец строки char, 2/обрабатывать то, что читается, 3/, а затем продолжить до следующего конца строки/конца файла char?

Я думаю, что было бы возможно, если бы поток filestream читал по 1 байт за раз и видел, содержит ли он новую строку char и нажимает этот байтовый контент на массив до тех пор, пока вы не встретите EOL char, но я не (пока) достаточно сильный в AS, чтобы написать что-то вроде этого, не теряя 3 месяца моей жизни... плюс я не слишком уверен в скорости процесса.

Кто-нибудь? Я бы предпочел не запускать отдельный вопрос, поскольку это по существу тот же спрос, но для больших файлов...

Ответ 5

Если вы используете запись в реальном времени, текст быстрее генерируется, чем другие, например .json или .xml. Но xml и json легче читать и анализировать.

Ответ 6

Для тех, кто задается вопросом о больших текстовых файлах, вы не можете знать, когда произойдет разрыв строки, прежде чем вы прочитаете байт строки. Я предлагаю иметь петлю, которая вместо чтения всех байтов с

fileStream.readUTFBytes(fileStream.bytesAvailable);

Вы делаете несколько сотен байт за раз, обрабатываете все, что вам нужно, а затем продолжайте чтение после.