2012-06-14 29 views
0

我想加載一個txt文件的變量到我的AS3項目中。我的問題似乎歸結於txt文件(它是預先格式化並且不能改變的)使用雙重amphersands來格式化。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,我可以成功加載數據,但我無法(或不知道如何)訪問這些變量。

有沒有人有任何想法或解決這個請。

感謝,

馬克

回答

3

前段時間我有這樣的問題。 我建議你先裝入作爲文本,刪除這些換行符,額外amphersands和手工解析:

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編輯在這裏,所以,也許你會發現錯誤。

+0

謝謝你的回答馬塞洛。 – crooksy88

2

如果您有字符串數據和它就像你寫了一個結構,你可以做一個變通方法:

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]; 
} 

這應該使你的對象具有適當的變量。

+0

謝謝你的回答盧卡斯。你的解決方案几乎可行,但我認爲字符串的slice方法返回被切片的元素,所以我們最終得到一個&。不幸的是,我不能接受2個答案。 – crooksy88