AS3加载来自txt文件的变量,该文件具有&&格式化

时间:2012-06-14 16:03:26

标签: actionscript-3 flash variables

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

&安培;名称=标记&安培;
&安培;地址=此处&安培;
&安培;电话= 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,我可以成功加载数据,但我无法(或不知道如何)访问变量。

请有人有任何想法或解决这个问题。

谢谢,

标记

2 个答案:

答案 0 :(得分:3)

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

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编辑器,所以,也许你会发现错误。

答案 1 :(得分: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];
}

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