1

行ごとの単語(つまり、1行に1つ)を含むテキストファイルが入力されたデータグリッドがあります。データグリッドには5つの列があります。テキストファイルの5語ごとに、新しい行に配置されます。その後、データグリッドを追加または削除できます。データグリッド内のすべての値を使用してテキストファイルを書き換えるにはどうすればよいですか?

これは、データグリッドにデータが入力される方法です。セルのデータグリッドセル全体を調べて、テキストファイルのデータを書き換えるにはどうすればよいですか?

var loadFavourites: URLLoader = new URLLoader();;
var arFavourites = new Array();

loadFavourites.addEventListener(Event.COMPLETE, onLoadedFavourites);
loadFavourites.load(new URLRequest("lists/Favourites.txt"));

function onLoadedFavourites(event:Event):void
{
    arFavourites = event.target.data.split("\r\n");

    for (var i:int = 0; i <= arFavourites.length; i++)
    {
        if (i != 0 && i % 5 == 0)
        {
            dg.addItem({Place: arFavourites[i-5],Subject:arFavourites[i-4],Object:arFavourites[i-3],Feeling:arFavourites[i-2],Action:arFavourites[i-1]});

        }
    }
}

レコードの追加:

var i:int=0;
    var tPlace = mc_places.mc_places_text.txtPlaces.text;
    var tSubject = mc_subject.mc_subject_text.txtSubject.text;
    var tObject = mc_object.mc_object_text.txtObject.text;
    var tFeeling = mc_feeling.mc_feeling_text.txtFeeling.text;
    var tAction = mc_action.mc_action_text.txtAction.text;
    arFavourites[FavCount+1]=tPlace;
    arFavourites[FavCount+2]=tSubject;
    arFavourites[FavCount+3]=tObject;
    arFavourites[FavCount+4]=tFeeling;
    arFavourites[FavCount+5]=tAction;
    dg.addItem({Place: arFavourites[FavCount+1],Subject:arFavourites[FavCount+2],Object:arFavourites[FavCount+3],Feeling:arFavourites[FavCount+4],Action:arFavourites[FavCount+5]});
    dg.scrollToIndex(dg.length-1);
    FavCount=FavCount+5;
    for (i=0; i<arFavourites.length; i++) {
                trace(arFavourites[i]);
            }

レコードの削除:

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

1 に答える 1

1

さて、私がすることは基本的にちょうど逆です。まず、の値を取得し、前と同じ順序でDataGrid元に戻します。Array

var newFavArray:Array = new Array();

for (var i:int = 1; i <= dg.length; i++)
{
    newFavourites[i * 5 - 5] = dg.getItemAt(i - 1).Place;
    newFavourites[i * 5 - 4] = dg.getItemAt(i - 1).Subject;
    newFavourites[i * 5 - 3] = dg.getItemAt(i - 1).Object;
    newFavourites[i * 5 - 2] = dg.getItemAt(i - 1).Feeling;
    newFavourites[i * 5 - 1] = dg.getItemAt(i - 1).Action;
}

i(にアクセスするためのより良い方法を見つけてArrayDataGrid気軽に使用できる場合は、これをかなりすばやく作成しました。)

String次に、それを:に変換します

var newFavString:String = newFavArray.join("\r\n");

そして最後にそれを好きなようにファイルに保存します(もちろん古い値を上書きします)。これはAIRアプリなので、これにはクラスFileFileStreamクラスを使用するのが最適です。

var favFile:File = File.applicationStorageDirectory.resolvePath("lists/Favourites.txt");
var favStream:FileStream = new FileStream();

favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();

あなたのワークフローが何であるかはわかりませんが、個人的にはこれらすべてを関数に入れます。

function saveFavourites():void
{
    var newFavArray:Array = new Array();

    for (var i:int = 1; i <= dg.length; i++)
    {
        newFavArray[i * 5 - 5] = dg.getItemAt(i - 1).Place;
        newFavArray[i * 5 - 4] = dg.getItemAt(i - 1).Subject;
        newFavArray[i * 5 - 3] = dg.getItemAt(i - 1).Object;
        newFavArray[i * 5 - 2] = dg.getItemAt(i - 1).Feeling;
        newFavArray[i * 5 - 1] = dg.getItemAt(i - 1).Action;
    }

    var newFavString:String = newFavArray.join("\r\n");

    var favFile:File = File.applicationStorageDirectory.resolvePath("lists/Favourites.txt");
    var favStream:FileStream = new FileStream();

    favStream.open(favFile, FileMode.WRITE);
    favStream.writeUTFBytes(newFavString);
    favStream.close();
}

いつでも実行できます。

File使用したことがなく、以前に使用したことがない場合はFileStream、それらをチェックして、どのように機能するかを確認することをお勧めします。URLRequestそれらはAIRでのみ利用可能ですが、およびよりもはるかに優れていますURLLoader。それらを使用してファイルをロードすることもできます。これらはローカルファイルにのみ役立ちますが、ファイルがオンラインか何かであれば、問題ないと確信しURLLoaderています。

于 2013-01-14T21:35:12.380 に答える