我正在努力让我的数组正确保存到文本文件中。文本文件以每行一行的方式格式化,因此我使用它:
var newFavString:String = arFavourites.join("\r\n");
favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();
但在某个地方,不知何故,它会添加空行,这可能是由某些数组条目中的空格引起的,但这不应影响我不认为的加入过程。
我用它来清理数组以防万一它仍然在跟踪中显示一些未定义的对象:
for (i=0; i<arFavourites.length-1; i++) {
if (arFavourites[i] == undefined) {
arFavourites.splice(i,1);
}
trace(arFavourites[i]);
}
这就是我将数据导入数组的方式:
var favFile:File = File.userDirectory;
favFile = favFile.resolvePath("favourites.txt");
var favStream:FileStream = new FileStream();
var arFavourites = new Array();
var FavCount:int = 0;
favStream.open(favFile, FileMode.READ);
var fileContents:String = favStream.readUTFBytes(favStream.bytesAvailable);
arFavourites = fileContents.split("\r\n");
for (i=0; i<arFavourites.length-1; i++) {
if (arFavourites[i] == undefined) {
arFavourites.splice(i,1);
}
}
favStream.close();
当我删除某些内容时,我会在数组中搜索它并拼接出来。也许错误就在那里。
var k:int;
var i:int;
trace("Selected Index: " + dg.selectedIndex);
if (dg.length == 0) {
return;
}
for (k=0; k<dg.length; k++) {
if (dg.isItemSelected(dg.getItemAt(k))) {
for (i=0; i<arFavourites.length; i++) {
if (arFavourites[i] == dg.getItemAt(k)[1]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[2]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[3]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[4]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[5]) {
arFavourites.splice(i,1);
}
}
dg.removeItemAt(k);
dg.scrollToIndex(k);
dg.clearSelection();
break;
}
}
for (i=0; i<arFavourites.length-1; i++) {
if (arFavourites[i] == undefined) {
arFavourites.splice(i,1);
}
}
var newFavString:String = arFavourites.join("\r\n");
trace(newFavString);
favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();
在数组中添加或删除某些内容时,会更新文本文件。 我确信它的东西非常简单,我非常感谢快速反应=) 感谢
答案 0 :(得分:0)
这实际上不是从数组中过滤掉事物的方法(你做得既效率低又缺少一些):
private function test():void
{
var tester:Array = [];
tester[1] = 1;
tester[2] = 2;
tester[4] = 3;
tester[6] = 4;
// 1-2-3-4
trace(removeEmptyElements(tester).join("-"));
}
public static function removeEmptyElements(array:Array):Array
{
var result:Array = new Array(array.length);
for (var i:int, j:int; i < array.length; i++)
if (array[i] != undefined) result[j++] = array[i];
result.length = j;
return result;
}
这将是这样做的方法。您还希望合并if语句测试互斥条件(或getitemAt
是否有副作用?)。否则它看起来更像是一个bug。
答案 1 :(得分:0)
好的,所以我终于想出了一个有效的解决方案。
通过获取selectedIndex
,我可以找出哪个数组元素与dataGrid行匹配,然后将其拼接出来。
选定指数:
arFavourites.splice(dg.selectedIndex*5,5);
从DataGrid中删除行:
for (k=0; k<dg.length; k++) {
trace(dg.length);
if (dg.isItemSelected(dg.getItemAt(k))) {
dg.removeItemAt(k);
dg.scrollToIndex(k);
dg.clearSelection();
}}
重写文字文件:
var newFavString:String = arFavourites.join("\r\n");
trace(newFavString);
favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();