Чтение текстового файла построчно и push в массив в AS3 - PullRequest
10 голосов
/ 20 мая 2009

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

sample.txt

    car
    van
    scooter
    bike

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

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

Ответы [ 6 ]

27 голосов
/ 20 мая 2009

Примерно так может работать:

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 - для удовольствия, я запустил код с примером файла, и он работал как шарм.

7 голосов
/ 20 мая 2009

Вот пример загрузки и чтения файлов различных типов с помощью 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 () для преобразования строки в целое число.

1 голос
/ 15 сентября 2009

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

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

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

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

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

1 голос
/ 23 мая 2009

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

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

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

0 голосов
/ 18 августа 2015

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

fileStream.readUTFBytes (fileStream.bytesAvailable);

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

0 голосов
/ 18 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...