在as3上使用txt文件

时间:2014-03-05 12:56:09

标签: actionscript-3 file text

我不习惯as3。我想将一些数据从txt文件转换为实际的as3对象。

  1. 如何在" /data/file.txt"
  2. 中加载文字
  3. 如何在文字中找到字词?例如:我想找到' frame'并检索每个符号系列(用空格分隔)并将其添加到数组/表中。

2 个答案:

答案 0 :(得分:0)

要加载文字文件,您需要URLLoader进行搜索,String methods

工作示例:

package {

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class StackOverflow extends Sprite {

        public function StackOverflow() {
            addEventListener(Event.ADDED_TO_STAGE, onAdded);
        }

        private function onAdded(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);

            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            loadFile("./data/file.txt");
        }

        private function setup(fileContent:String):void {
            var searchWord:String = "commodo";
            var position:int = fileContent.indexOf(searchWord);
            var result:String = fileContent.substr(position + searchWord.length);
            var resultAsArray:Array = result.split(" ");
        }

        private function loadFile(path:String):void {
            var loader:URLLoader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, onComplete);
            loader.load(new URLRequest(path));
        }

        private function onComplete(e:Event):void {
            var content:String = URLLoader(e.currentTarget).data;
            setup(content);
        }
    }
}

文件内容为:

  

Lorem ipsum dolor坐下来,这是一种不可或缺的精神。 Aenean commodo ligula eget dolor。 Aenean massa。 Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus。 Donec quam felis,ultricies nec,pellentesque eu,pretium quis,sem。 Nulla consequat massa quis enim。

结果将是 commodo

一词中的所有文字

答案 1 :(得分:0)

<强> 1

这取决于。如果文件位于客户端计算机上,则只能在使用AIR(Flash Player,用完浏览器,不支持此功能)时加载它。使用FileStream.readUTFBytes(),如下所示:

try
{
    var file:File = new File();
    file.nativePath = "the file's path, including the file name";

    if (file.exists)
    {
        var fs:FileStream = new FileStream();
        try
        {
            fs.open(file, FileMode.READ);
            var strFileContents:String = fs.readUTFBytes(fs.bytesAvailable);
        }
        catch (eInner:Error)
        {
            Alert.show(eInner.message);
        }
        finally
        {
            fs.close();
        }
    }
}
catch (eOuter:Error)
{
    Alert.show(eOuter.message);
}

关于这一点的一些注意事项:如果我没有弄错,至少除非你发现某种特殊技巧,否则文件的nativePath属性需要设置为绝对路径,或者如果它是相对路径,则它需要与程序在同一目录中(它可以在子目录中)。这可能是Adobe有意实施的安全问题。同样设置nativePath(显式或通过构造函数)可能会引发错误,因此外部try ... catch块也很重要。

如果您通过URL从服务器加载文件,则可以使用Flash Player或AIR。只需使用URLLoader代替:

private var m_ldr:URLLoader = new URLLoader();

private function func()
{
    try
    {
        m_ldr.dataFormat = URLLoaderDataFormat.TEXT; // default
        m_ldr.addEventListener(Event.COMPLETE, ldrDone);
        m_ldr.load(new URLRequest("URL of the file"));
    }
    catch (e:Error)
    {
    Alert.show(e.message);
    }
}

private function ldrDone(pEvent:Event):void
{
    var strContents:String = m_ldr.data;
}

<强> 2

我不确定我是否按照您要对文本执行的操作,但您可以将String拆分为数组。如果你想找到单词“frame”,如果你关心这个例子中的case,你可以做类似以下的事情:

var strString:String = "Frame: The first definition at dictionary.com for the" +
        "word frame is \"a border or case for enclosing a picture, mirror, " +
        "etc.\".  A related word is framed, and frame can also be used as a verb."
        + " ... frame";

// notice how I specifically avoided wrapping double-quotes around the word
// "frame".  That makes this easier, because now we just have to split on
// whitespace:

var arry:Array = strString.split(/\s/); // splits on all whitespace
for (var i:int = 0; i < arry.length; i++)
{
    if (arry[i] == "frame")
    {
        trace("Element " + i + " is the word \"frame\"." + (i < arry.length - 1 ?
                "  The next word is \"" + arry[i + 1] + "." : "\""));
    }
}

// outputs:
// Element 10 is the word "frame".  The next word is "is".
// Element 27 is the word "frame".  The next word is "can".
// Element 36 is the word "frame".