【问题标题】:Reading the text file line by line and push to an array in AS3逐行读取文本文件并推送到 AS3 中的数组
【发布时间】:2010-10-27 15:28:45
【问题描述】:

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

sample.txt

    car
    van
    scooter
    bike

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

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

【问题讨论】:

标签: flash actionscript-3


【解决方案1】:

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

【讨论】:

  • 是的,但您无法将 700 MB 的大文件读入内存!使用 fileStream.readUTFBytes(fileStream.bytesAvailable);你得到文件的内容,但如果它太大,你的应用程序就死了:)我也不知道如何逐行读取文件,这就是我在这里的原因..
  • 另外,对于一些更新的版本(不确定是哪个版本),他们已将 resolve 修改为 resolvePath。
【解决方案2】:

对于那些想知道大文本文件的人来说,在读取换行字节之前,您无法知道何时会出现换行符。我的建议是有一个循环,而不是用

读取所有字节

fileStream.readUTFBytes(fileStream.bytesAvailable);

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

【讨论】:

    【解决方案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】:

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

      【讨论】:

        【解决方案5】:

        这适用于小文件,不适用于防火墙或网络服务器日志文件等巨大文件。

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

        有解决办法吗 1/ 读取文件直到遇到行尾字符, 2/处理读取的内容, 3/ 然后继续直到下一行结尾/文件结尾字符?

        我认为可以使用文件流一次读取 1 个字节并查看它是否包含换行符,然后将该字节内容推送到数组中,直到遇到 EOL 字符,但我(还)不强足以在 AS 中写出类似的东西而不会失去我 3 个月的生命……而且我不太确定这个过程的速度。

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

        【讨论】:

        • 好问题,我认为它应该有它自己的主题,你有没有找到解决方案,如果是,请分享。谢谢
        • 不,抱歉,我实际上已经停止使用 flex - 我已经习惯了 Python,我只需几行代码就可以完成上述操作。使用 flex 时,我不断遇到问题和额外的工作,所以最后我又回到了使用 python。
        【解决方案6】:

        这样的事情可能会奏效:

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

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

        【讨论】:

          猜你喜欢
          • 2016-11-20
          • 2015-05-12
          • 2013-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多