0

変数の txt ファイルを AS3 プロジェクトにロードしようとしています。私が抱えている問題は、txtファイル(事前にフォーマットされており、変更できない)が二重アンファーサンドを使用してフォーマットされているという事実にあるようです...

&name=mark&
&address=こちら&
&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 を使用すると、データを正常にロードできますが、変数にアクセスできません (またはアクセス方法がわかりません)。

誰かがこれに対するアイデアや回避策を持っていますか?

ありがとう、

マーク

4

2 に答える 2

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 エディターがありません。そのため、エラーが見つかる可能性があります。

于 2012-06-14T16:26:43.897 に答える
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];
}

これにより、適切な変数を持つオブジェクトが作成されます。

于 2012-06-14T16:26:37.053 に答える