【问题标题】:AS3 load variables from a txt file which has && formattingAS3 从具有 && 格式的 txt 文件加载变量
【发布时间】:2012-06-14 16:03:26
【问题描述】:

我正在尝试将变量的 txt 文件加载到我的 AS3 项目中。我遇到的问题似乎归结为 txt 文件(已预先格式化且无法更改)是使用双符号格式化的......例如

&name=标记&
&地址=这里&
&tel=12345&

我正在使用下面的代码来加载txt文件

myLoader.addEventListener(Event.COMPLETE, onLoaded, false, 0, true);
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlRqSend = new URLRequest(addressToTxt.txt);

public function onLoaded(e:Event):void {
trace(myLoader.data);
}

使用 URLLoaderDataFormat.VARIABLES 会产生以下错误:

Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.

如果我使用 URLLoaderDataFormat.TEXT,我可以成功加载数据,但我无法(或不知道如何)访问变量。

请问有人对此有任何想法或解决方法吗?

谢谢,

标记

【问题讨论】:

    标签: actionscript-3 flash variables


    【解决方案1】:

    我前段时间遇到过这种问题。 我建议您先加载为文本,删除那些换行符、额外的符号并手动解析:

    var textVariables:String;
    var objectVariables:Object = new Object();
    ...
    myLoader.addEventListener(Event.COMPLETE, onLoaded, false, 0, true);
    myLoader.dataFormat = URLLoaderDataFormat.TEXT;
    urlRqSend = new URLRequest(addressToTxt.txt);
    
    public function onLoaded(e:Event):void {
        textVariables = myLoader.data;
        textVariables = textVariables.split("\n").join("").split("\r").join(""); // removing line breaks
        textVariables = textVariables.split("&&").join("&"); // removing extra amphersands
    
        var params:Array = textVariables.split('&');
    
        for(var i:int=0, index=-1; i < params.length; i++)
        {
            var keyValuePair:String = params[i];
            if((index = keyValuePair.indexOf("=")) > 0)
            {
                 var key:String = keyValuePair.substring(0,index);
                 var value:String = keyValuePair.substring(index+1);
                 objectVariables[key] = value;
                 trace("[", key ,"] = ", value);
            }
        } 
    
    }
    

    我直接在这里写了代码,我这里没有任何AS3编辑器,所以,也许你会发现错误。

    【讨论】:

    • 感谢马塞洛的回答。
    【解决方案2】:

    如果你有 String 中的数据并且它的结构和你写的一样,你可以做一个解决方法:

    dataInString = dataInString.split("\n").join("").split("\r").join(""); // removing EOL
    dataInString = dataInString.slice(0,-1); // removing last "&"
    dataInString = dataInString.slice(0,1); // removing first "&"
    
    var array:Array = dataInString.split("&&");
    var myVariables:Object = new Object();
    
    for each(var item:String in array) {
        var pair:Array = item.split("=");
        myVariables[pair[0]] = pair[1];
    }
    

    这应该使您成为一个具有适当变量的对象。

    【讨论】:

    • 感谢您的回答 Lukasz。您的解决方案几乎可以工作,但我认为字符串的 slice 方法返回正在被切片的元素,因此我们最终得到一个 &。不幸的是,我不能接受 2 个答案。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2023-02-22
    • 2018-05-24
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    相关资源
    最近更新 更多