0

我很难让我的数组正确保存到文本文件中。文本文件以每行一个条目的方式格式化,因此我使用它:

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();

当从数组中添加或删除某些内容时,文本文件会更新。我敢肯定它真的很简单,我将不胜感激快速响应=)谢谢

4

2 回答 2

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有副作用?)。否则它看起来更像是一个错误。

于 2013-01-15T13:50:21.753 回答
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();
于 2013-01-15T18:49:27.137 回答