• ベストアンサー

Flashで外部ファイルの指定行のみ取り出し表示

初心者です。 当初は、ActionScriptで外部ファイルphpを読み込み、phpの中にtxtから取り出した文字列を表示しようとしていました。 多分、これでもできると思いますが、ActionScriptからphp経由せず、直接txtから取り出せないかと思い、質問します。 ActionScriptで外部ファイル(txt)の中身の2行目だけ取り出すという方法はできるのでしょうか? <テキスト例(txt)> 花子 東京都 乙女座 このうち2行目の東京都だけ取り出すということです。 こちらの方が、phpをわざわざ挟まずにシンプルだと思いました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > テキストファイルは、同じドメイン内ですが、 > 別フォルダに入れています。 と書かれていらっしゃいますが とりあえずは状況を単純化するために 「SWF(Flashファイル)」と 「その SWF を貼り付けた HTML」と 「外部テキストデータ」の3つは すべて同じフォルダ(同階層)にあるものとします。 また 外部テキストファイルのファイル名は 「data.txt」であるものとし, その「data.txt」の文字コードは Shift-JIS であるものとします。 さらに 改行コードは...,書かれていらっしゃいませんから, 「\r(CR)」なのか「\n(LF)」なのか「\r\n(CR+LF)」なのかは不明であるものとします。 (不明でしたら不明で処理を1つ入れれば解決できます。) そして その「data.txt」内のデータは 次のようになっているものとします。 花子 東京都 乙女座 上のような状況である場合の タイムラインのフレームに書く ActionScript 3.0 でのスクリプト例です。 //------------------------------------------- //外部テキストを Shift-JIS として扱う設定 System.useCodePage = true; //テキストの各行を各要素として格納する配列を宣言 var data_arr:Array; //外部テキストロード用インスタンス ld を作成 var ld:URLLoader = new URLLoader(); //外部テキストがロード完了時に 関数completeFunc を実行 ld.addEventListener(Event.COMPLETE, completeFunc); //外部テキストがロードされたときに実行する関数を定義 function completeFunc(e:Event):void { // //ロードされたテキストの改行コードを「\n」に統一 var data_str:String = ld.data.split("\r\n").join("\n").split("\r").join("\n"); // //ロードされたテキストを改行コード「\n」で分割して配列に代入 data_arr = data_str.split("\n"); // //配列の 要素1(data_arr[1]) を適当にテスト表示 var test_txt:TextField = new TextField(); test_txt.x = test_txt.y = 10; test_txt.width = 200; test_txt.height = 50; addChild(test_txt); test_txt.text = data_arr[1]; } //URLリクエストインスタンス rq を作成 var rq:URLRequest = new URLRequest("data.txt"); //ld にリクエストファイルをロード ld.load(rq); //------------------------------------------- 外部テキストへのファイルパス(この場合「data.txt」)は, SWF からのパスではなく, SWF を貼り付けた HTML からのパスになるので注意してください。 つまり SWF とそれを貼り付けた HTML が違うフォルダにあった上で ファイルパスを相対パスで指定するときに注意が必要です。     === スクリプトの内容説明 ============= まず, 「ld」という名の外部テキストロード用の入れ物を作成して, その「ld」内に外部テキスト「data.txt」をロードさせています。 当たり前ですが 外部テキストのロード完了後でなければ 外部テキスト内のデータを見たりいじったりすることはできません。 したがって 外部テキストのロード完了時に動作するイベントリスナー(関数)を定義して その関数内でデータをいじる作業をしています。 「ld」内にロードされたデータは ロード完了後に「ld」の「data」プロパティ(ld.data)を参照すれば得られます。 ですからロード完了後にまず //ロードされたテキストの改行コードを「\n」に統一 var data_str:String = ld.data.split("\r\n").join("\n").split("\r").join("\n"); これで その「ld.data」内の文字列を「\r\n」で分割した配列にして その配列を「\n」で結合した文字列に戻し さらにその文字列を「\r」で分割した配列にして その配列を「\n」で結合した文字列に戻しています。 結局, 改行コードが「\r」であっても「\n」であっても「\r\n」であっても 全て「\n」に統一されるわけです。 その改行コードが「\n」に統一された文字列を //ロードされたテキストを改行コード「\n」で分割して配列に代入 data_arr = data_str.split("\n"); これで「\n」で分割した配列にしています。 最初から改行コードは例えば「\r\n」だとわかっていれば 改行コードを「\n」に統一するようなことはしなくて良く ロード後に即, //ロードされたテキストを改行コード「\r\n」で分割して配列に代入 data_arr = data_str.split("\r\n"); とすれば良いだけです。 とにかく この時点で配列「data_arr」の中身は data_arr[0] = "花子" data_arr[1] = "東京都" data_arr[2] = "乙女座" という状態になります。 後はその data_arr[1] の値を取ってきて 仮にテキストフィールドに表示させています。 (実際にはどうするのか知りません。)

nene333
質問者

お礼

ありがとうございました! 昨日、自分で調べてずっとFlashに向かっていろいろ試していましたが、なかなかうまくいかず悩んでいました。 上記で無事、表示されました。 こんなにご丁寧に解説していただき、誠に感謝致します。 まだ、他にもいくつかやるべきハードルはありますが、自分で頑張ってみます。 ご親切感謝致します。 誠にありがとうございました。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> 多分、これでもできると思いますが、 > ActionScriptからphp経由せず、 > 直接txtから取り出せないかと思い、質問します。 私も多分できると思いますが..., その方法は 「ActionScript のバージョン」や 「テキストファイル の改行コード」 「テキストファイル の文字コード」 などによって変わります。     要するに その辺を書かれていない以上(つまり作成する段階でどうでも良い物としてる以上), いくら Flash などに堪能でもどうにもならないのです。 その「場合」「場合」を言っていたらキリがありませんが お持ちの Flash 作成ソフトが Flash CS3 より新しいものでしたら ActionScript 3.0 が使えると思いますが 古い Flash Player (Flash Player 8 以下)を対象にするのでしたら ActionScript 3.0 は使えませんし, お持ちの Flash 作成ソフトが Flash 8 以前でしたら ActionScript 2.0 以下しか使えませんし, お持ちの Flash 作成ソフトが Flash MX 以前でしたら ActionScript 1.0 以下しか使えませんし, などなど………………………………………,,,,, 仮に 「Windows でメモ帳を使って作成したテキストファイル」だと デフォルトでは 文字コード は Shift-JIS で 改行コード は \r\n(CR+LF(0xD 0xA))です。 その他の環境でその他のテキストデータの文字コードなど全てを一々推測できません。 つまりその辺は データの作者が把握しておくべきことです。 「場合」「場合」が多すぎます。 そういう「具体的な状況」がわからなければ誰も何もできません。 端的な回答が必要な場合は なるべく早いうちにその辺の補足などをお願いします。

nene333
質問者

補足

お手数をおかけして申し訳ございません。 ご丁寧にありがとうございます。 どのような情報がいるかさえわからず・・・ そのため、とにかくこういうことがしたいのだとだけ書かせていただきました。 バージョンはCS5.5、ActionScript3.0です。 テキストファイルは、Shift-JISです。 テキストファイルは、同じドメイン内ですが、別フォルダに入れています。 昨日から調べていたら、いろいろヒントがあり、できそうだと思いました。 まずファイルを読み込む処理をして、そのテキスト内の改行位置を調べて、2行目を取り出す感じですよね。 参考にしているページはここです。 http://f-site.org/articles/2007/02/08061116.html http://www40.atwiki.jp/spellbound/pages/1299.html

関連するQ&A

専門家に質問してみよう