逐行读取文本文件并推送到AS3中的数组

时间:2009-05-20 13:49:11

标签: flash actionscript-3

我需要AS3中的一些代码,它们将逐行读取文本文件并将其插入到数组中。这可能没有任何特殊性质吗?

sample.txt的

    car
    van
    scooter
    bike

我需要读取文件并将其插入如下数组:

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

6 个答案:

答案 0 :(得分:27)

这样的事情可能有用:

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函数中的数组将包含您的项目数组。

编辑 - 为了好玩,我使用示例文件运行代码,它就像一个魅力。

答案 1 :(得分:7)

以下是使用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()将字符串转换为整数。

答案 2 :(得分:1)

这适用于小文件,而不适用于像防火墙或网络服务器日志文件这样的大文件。

这些文件根本不会完全加载到内存中。

是否有解决方案 1 /读取文件,直到遇到行结束char, 2 /进程读取, 3 /然后继续直到文件的行/结束的下一个结束?

我认为有可能一次使用1个字节的文件流读取并查看它是否包含换行符,并将该字节内容推送到数组上,直到遇到EOL char,但我还不够强大足够在AS写这样的东西而不会失去3个月的生命......加上我对这个过程的速度不太确定。

任何人?我宁愿不提出一个单独的问题,因为这基本上是相同的需求,但对于更大的文件......

答案 3 :(得分:1)

嗯,使用space作为分隔符真的有点奇怪。 我的意思是,你可以这样做:

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 :(得分:0)

如果您使用实时录制,则生成文本的速度比.json或.xml等其他文本更快。但是xml和json更容易阅读和解析。

答案 5 :(得分:0)

对于那些想知道大文本文件的人,在读取换行字节之前,你不知道什么时候会有换行符。我建议有一个循环,而不是用

读取所有字节
  

fileStream.readUTFBytes(fileStream.bytesAvailable);

你一次做几百个字节,处理你需要的任何东西,然后继续阅读。