• ベストアンサー

外部ファイルから値を読み込む時

http://www.procreo.jp/material/materials05.html ここのサイトをみると 外部ファイルは普通、 (変数名)=(値) & (変数名)=(値)  などですよね。 でも「,」だけでやってるのです。 これはどうやってやるのでしょうか? ご存知の方がいましたらご教授ください><

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

Flash Player 6 以降から使えるようになった LoadVars クラス( Flash MX ではオブジェクト)の onData イベントを利用すると、テキストファイルに書かれていた内容をそのまま取得することができます。 onData イベントを利用して取得した文字列を、使いやすいように独自の方法で加工しているのだと思います。 外部から変数を読み込むアクションに loadVariables がありますが、Flash Player 6 からは、これを強化した LoadVars というクラスが登場しました。 LoadVars クラスでは、読み込み終了時に2段階にわたってイベントが発生します。 テキストファイルや CGI からデータを取得した時点で onData 、このデータを解析して”変数とその値”という形に加工し終わった時点で onLoad イベントが発生します。 一般的には onLoad の方が有名で、入門書や解説サイトではこちらを使用した作例が多いと思います。 onData イベント発生時の処理を定義しておくと、イベント発生時に呼び出される関数では、テキストファイルや CGI から読み込んだテキストをそのまま引数として受け取ることができます。 つまり、onData イベントを利用すれば、たとえテキストファイルに「変数=値」という形で記述されていなかったとしてもテキストファイルに書いてあった内容を取得できるのです。 ただし、onData イベントを利用した場合は、本来発生するはずの onLoad イベントが発生しなくなります。 LoadVars クラスの onData イベントについては、以前、別の質問で説明したことがありますので、よろしければご参考になさってください。 #2の後半で説明しております。  ・外部テキスト読み込み   http://okwave.jp/kotaeru.php3?q=1668616 ------------------------------------------------------------------ onData イベントを使用すると読み込んだままのテキストを取得できるのですが、onLoad イベントのように利用しやすい形に加工してくれるサービスは付きません。 読み込んだテキスト加工する処理は、自前で用意する必要があります。 例えば、テキストファイル data.txt の内容が  top.html,  diary.html,  bbs.html,  http://***.html,  http://○○○.html このように書かれていたとします。 onData イベントを使用してテキストを取得することはできても、このままではひとかたまりのテキストにすぎず、リンク先などの指定には利用できません。 そこで、” , ”を区切りの文字としてテキストを分割し、項目ごとに配列変数に格納しておくことにします。 配列変数にいれておくと、表を見るような感覚でリンク先を取得することができます。 このテキストを読み込んで、最終的にリンク先を1つずつ利用できるように加工するスクリプトは、大体、次のようになります。 このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //リンク先を管理する配列変数  link_tbl = new Array();  //オブジェクトを作成  load_obj = new LoadVars();  //独自の解析処理を実装  load_obj.onData = function( src )  {   var str , arr;   //読み込みに成功した時、リンク先のリストを作る   if( src != undefined )   {    //読み込んだテキストを改行コードで分割し、改行を削除する    str = new String( src );    arr = str.split( "\r" );    str = new String( arr.join( "" ) );    arr = str.split( "\n" );    str = new String( arr.join( "" ) );    //テキストを”,”で分割し、配列変数に格納    link_tbl = str.split( "," );   }  };  //テキストファイルを読み込む  load_obj.load( "data.txt" ); この例では、onData イベント発生時に呼び出される関数の引数を見てテキストファイルから読み込んだ文字列をそのまま取得し、関数内部でこの内容を加工して、最終的にリンク先を link_tbl という配列変数に分割して格納します。 例えば、テキストファイルの内容が先の data.txt のようなものだったとすると、最終的には  link_tbl[ 0 ] → top.html  link_tbl[ 1 ] → diary.html  link_tbl[ 2 ] → bbs.html   : というように配列変数に入ります。 テキストファイルを読み込む時は、改行コードにご注意ください。 リンク先として指定する時や読み込んだテキストを数値として扱いたい場合は特に、改行コードが含まれていると正常に動作しないことがあります。 最初から改行しないように書くのも1つの手ですけれど、頒布用の素材ではユーザーは何をするか分かりません。 スクリプトの方で改行コードを削除してから処理するようにしておくと、誤って改行が混入していた場合でも対処できます。 String クラスの split は、指定した文字で文字列を分割し、分割した文字列を配列変数に格納するメソッドです。 分割の目印になった文字は、元の文字列や切り離された文字列からは削除されます。 今回は” , ”で分割してリンク先を1つずつ取り出すほかに、改行コード \r と \n で分割することで改行コードを削除する処理に利用しています。 配列変数を表現する Array クラスには、join というメソッドがあります。 バラバラになっている配列変数の要素をつなぎ合わせて1つの文字列にする、いわば String クラスの split メソッドの逆の働きをするものです。 何も指示しなければ、配列変数の要素同士の間に” , ”を挿入しながら結合されます。 要素の間に入れる文字を空っぽの文字列( "" )にすると、つなぎ目に余計な文字を入れることなく結合できます。

yui0909
質問者

お礼

ありがとうございます!!! 聞きたいことがそのまま答えてくれて>< 感謝感激です>< わざわざこのような長文書いてくださってありがとうございます。 参考書よりためになります^^ 本当にありがとうございました!

関連するQ&A