web-dev-qa-db-ja.com

テキストファイルを1行ずつ読み取り、AS3の配列にプッシュします

テキストファイルを1行ずつ読み取り、配列に挿入するAS3のコードが必要です。これは特殊文字なしで可能ですか?

sample.txt

    car
    van
    scooter
    bike

ファイルを読み取って、次のような配列に挿入する必要があります。

Array[0]=car
Array[1]=van
Array[2]=scooter
Array[3]=bike
10
vineth

このようなものが機能する可能性があります:

var myTextLoader:URLLoader = new URLLoader();

myTextLoader.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event):void {
    var myArrayOfLines:Array = e.target.data.split(/\n/);
}

myTextLoader.load(new URLRequest("myText.txt"));

OnLoaded関数の配列には、アイテムの配列が含まれます。

編集-楽しみのために、サンプルファイルを使用してコードを実行しましたが、それは魅力のように機能しました。

27
Kekoa

これは、ActionScript3を使用してさまざまなファイルタイプを読み込んで読み取る例です。

      import flash.filesystem.FileMode;
      import flash.filesystem.FileStream;
      import flash.filesystem.File;

      var myFile:File = File.appResourceDirectory; // Create out file object and tell our File Object where to look for the file
      myFile = myFile.resolve("mySampleFile.txt"); // Point it to an actual file

      var fileStream:FileStream = new FileStream(); // Create our file stream
      fileStream.open(myFile, FileMode.READ);

      var fileContents:String = fileStream.readUTFBytes(fileStream.bytesAvailable); // Read the contens of the 
      fileContents_txt.text = fileContents; // Display the contents. I've created a TextArea on the stage for display

      fileStream.close(); // Clean up and close the file stream

文字列を読み取った後、int.valueOf()を使用して文字列を整数に変換できます。

7
Sefler

これは、ファイアウォールやWebサーバーのログファイルなどの巨大なファイルではなく、小さなファイルに対して機能します。

これらのファイルは、メモリに完全にはロードされません。

1 /行末charに遭遇するまでファイルを読み取り、2 /読み取ったものを処理し、3 /次に行末/ファイルの終わりcharまで続行する解決策はありますか?

一度に1バイトを読み取り、改行文字が含まれているかどうかを確認し、EOL文字に遭遇するまでそのバイトの内容を配列にプッシュするファイルストリームを使用することは可能だと思いますが、私は(まだ)ASに十分な力がありません私の人生の3ヶ月を失うことなくそのような何かを書くために...そして私はプロセスの速度についてあまり確信がありません。

誰でも ?これは本質的に同じ要求ですが、より大きなファイルに対するものであるため、個別の質問を開始したくありません...

1
Alex Boschmans

うーん、スペースを区切り文字として使用するのは本当に少し奇妙です。つまり、次のように行うことができます。

var result:Array = [];
for each (var s:String in source.split(" ")) {
     var a:Array = s.split("=");
     result[a[0]] = a[1];
}

それでも、分割に「」を使用するのは、あまり良い考えではありません。JSON、CSV、またはXMLを使用できませんか?

1
back2dos

リアルタイムの記録を使用している場合、テキストは.jsonや.xmlなどの他のテキストよりも高速に生成されます。ただし、xmlとjsonの方が読みやすく解析も簡単です。

0
Celso Soares

大きなテキストファイルについて疑問に思っている人にとっては、改行バイトを読む前に、いつ改行があるかを知ることはできません。私が提案するのは、すべてのバイトを読み取る代わりにループを作成することです。

fileStream.readUTFBytes(fileStream.bytesAvailable);

一度に数百バイトを実行し、必要なものをすべて処理してから、読み続けます。

0
Thiago Camargo