我有一个属性文件,其中包含两个不同的键值对模式,如下所示;
如果密钥已知,则逐个访问它们很好。 但是,我现在需要的是从name.name.name访问所有值而不知道键(整数是准确的)。然后必须将值添加到ArrayList中以显示在List中。
键是完全随机的,所以我事先不知道范围(我不能也不想为每个单个属性文件硬编码键范围),所以只需循环一个先前定义的范围不是我需要的。此外,密钥不是连续的。
如何使用AS3执行此操作?
只是为了澄清,因为这似乎有点令人困惑; 我不想解析属性文件。我宁愿使用AS和Flex已经提供的方法来解决这个问题。 ResourceBundle类已经有一个输出指定包的内容的方法。但是,它包含所有值。我需要的只是与给定键模式匹配的值的子集。
编辑: 为了使这更容易,我可以删除键模式匹配并创建具有不同模式的新资源文件。现在我只需要从该资源获取所有键值对(我需要来自键和值的整数)。
答案 0 :(得分:2)
这是一个使用字符串解析的简单示例:
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
var l:URLLoader = new URLLoader(new URLRequest("inp.txt"));
l.addEventListener(Event.COMPLETE, onComplete);
function onComplete(e:Event):void
{
var data:String = e.target.data;
//remove whitespace
data = data.replace(' ','');
//split data string by lines
var pairs:Array = data.split("\r\n");
//our name search pattern
var pattern:RegExp = /name\.name\.name/;
//array to store extracted values
var values:Array = [];
for each (var s:String in pairs) {
if (pattern.test(s)) {
//we've got a match, let's extract value
var value:String = s.split("=")[1];
values.push(value);
}
}
}
答案 1 :(得分:0)
包提供的改编的String格式化方法;
function onComplete(e:Event):void
{
var data:String = e.target.data;
var pairs:Array = data.split("\r\n");
var values:Array = [];
for each (var s:String in pairs) {
var value:String = s.split("=")[1];
values.push(value);
}
trace(values);
}
不确定原因,但是跟踪给出了第一对的值加上第二对的值。 不知道为什么。
我实际上是关于在字典中添加键和值,围绕这一行;
_dict[arr[0].substr(0, arr[0].length)] = arr[1];