• ベストアンサー

FLASH8 外部テキストファイルの読み込みについて

外部テキストファイルの読み込みを参考資料などを見ていると、下記のような形式で読み込みを行っているのですが。 a.txt --------------------- 任意の変数名1=値 任意の変数名2=値 任意の変数名3=値 --------------------- 下記のようなテキストファイルを読み込むことは可能でしょうか? a.txt --------------------- 2<>名前<>メールアドレス<>画像.jpg<> 1<>名前<>メールアドレス<>画像.jpg<> --------------------- ※最初の1文字目は連番の数字です 前文の方の読み込みは成功しておりますが、下の内容については、どうすればよいかわかりません・・・ 読み込みができるのであれば、各行はsplitで配列に格納したいと思っています。 どうぞよろしくお願いいたします。

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

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

以下,#2 の方の補足的回答だと思っていただければよろしいかと思います。 > 各行はsplitで配列に格納したいと思っています。 ここが具体的でなくてよくわかりませんが, 「<>」 を区切り記号として,  2, 名前, メールアドレス, 画像.jpg,  1, 名前, メールアドレス, 画像.jpg, というような2次元配列1つを作成するということとして回答します。 - - - - - - - そして外部テキストですが, 回答するにはもう1つ問題点があります。 データを作成するソフトやOSやプログラムや設定によって改行コードは違います。 1つの例として,  Windows の メモ帳 を用いて  文字コードShift-JIS(ANSI)で普通に,  2<>名前<>メールアドレス<>画像.jpg<>  1<>名前<>メールアドレス<>画像.jpg<>  というデータを記入して,  「data.txt」 というファイル名で保存した場合 についてスクリプト例を回答します。 「data.txt」 と同じフォルダにSWFがある場合の, フレームに書くスクリプト↓。 ---------------------------------------- // テキストをShift-JIS として扱う System.useCodepage = true; // LoadVarsクラスのインスタンス myLV を作成 myLV = new LoadVars(); // データを格納する配列 dataArr を作成 dataArr = new Array(); // ロード完了時の動作定義(引数:ロードしたデータ) myLV.onData = function(myData) { // 改行コード区切りで preArr を作成 preArr = myData.split("\r\n"); // preArr の要素数未満でループ for (i=0; i<preArr.length; i++) { // preArr を <>区切りで dataArr のi番要素 に代入 dataArr[i] = preArr[i].split("<>"); } // ---↓出力検証(本題と関係なし)↓--- for (i=0; i<preArr.length; i++) { for (j=0; j<dataArr[0].length+1; j++) { trace("dataArr["+i+"]["+j+"]="+dataArr[i][j]); } trace("------------"); } // ---↑出力検証(本題と関係なし)↑--- }; // 外部テキストのロード myLV.load("data.txt"); ---------------------------------------- 通常, LoadVars.onLoad でロード完了のタイミングを取得すると思いますが, 上の例では LoadVars.onData で取得しています。  LoadVars.onData = function(変数名){ } という形で定義するとその 変数 の値としてロードしたデータ自体が代入されます。 このような方法を使うと,  変数名=値&変数名=値&変数名=値&… というデータ形式でなくてもロードしたデータを取ってくることが可能になります。 ご質問では, > 外部テキストファイルの読み込みを参考資料などを見ていると、 > 下記のような形式で読み込みを行っているのですが。 と書かれていらっしゃいますが, 読み込み まででしたらどんな形のテキストファイルでも可能です。 たとえば XML でも HTML でも CSV でも SVG でも何でもです。 テキストのロードは何でも可能なのですが, ただ, XML を除くテキストの場合,  変数名=値&変数名=値&変数名=値&… のような形にしておかなければ, データの値が利用できない (名指しで呼べない) から, そういう形式のデータにしてあるだけです。 上のように LoadVars.onData を使うと, データ全体は名指しで呼べるようになるので, 変な形のデータでも工夫次第でその後の利用が可能になります。 - - - - - - - Windows メモ帳 の改行コードは \r\n(CR+LF) です。 また,文字コードは変えられますがデフォルトでは Shift-JIS です。 Excel で CSV を保存した場合も \r\n( CR+LF) です。 その他はソフトやそのソフトの設定によって変わります。 Mac の場合はソフトの設定によっては変えられると思いますが, デフォルトでは Shift-JIS で, 基本的に改行コードは \n(LF) だと思います。 その他も場合によって変わります。 - - - - - - - 上のコードを書いて 「制御」→「ムービープレビュー」 してみると, 「出力検証(本題と関係なし)」 によって次のようなものが出力表示されます。  dataArr[0][0]=2  dataArr[0][1]=名前  dataArr[0][2]=メールアドレス  dataArr[0][3]=画像.jpg  dataArr[0][4]=  dataArr[0][5]=undefined  ------------  dataArr[1][0]=1  dataArr[1][1]=名前  dataArr[1][2]=メールアドレス  dataArr[1][3]=画像.jpg  dataArr[1][4]=  dataArr[1][5]=undefined  ------------ 「<>」 を区切り記号としていますから, 画像.jpgの後にも <> があるため 画像.jpg の後にも "" という要素は存在します。 この点に少し注意してください。  

hahaha01
質問者

お礼

お返事ありがとうございます! ま、まさに知りたいことが全て解決しました!! スクリプトまでご提示いただき、とても感謝しております。 ご指摘のとおり、テキストファイルの内容は操作上、自由に書きかえれるものではなく、FLASHに読み込みだけとなるため、「<>」の区切り線の最後についても注意いたします! テキストファイルの文字コードは「Shift-JIS」です。質問内容に不備があったかと思いますが、ここまでご理解いただき幸いです! 本当にありがとうございました!!

その他の回答 (3)

  • rtch
  • ベストアンサー率25% (1/4)
回答No.3

データ形式が固定されてるのであれば myIndex_1=2<>名前<>メールアドレス<>画像.jpg<> myIndex_2=1<>名前<>メールアドレス<>画像.jpg<> としたらどうでしょうか myIndex_n の部分は好きなように変えていただけますし あるいはテキストファイルの先頭に単純に myDat=を付加して myDat=2<>名前<>メールアドレス<>画像.jpg<>1<>名前<>メールアドレス<>画像.jpg<> とか

hahaha01
質問者

補足

アドバイスありがとうございます。 データ形式というよりテキストファイル自体を操作することが できないという前提です。 なので、「myDat=」という文字列を追加することはできません。 あくまでも、テキストファイルを開いたら下記のようにデータが 格納されているのを前提にFlash側で読み込み各値を操作したいのです。 --------------------- 2<>名前<>メールアドレス<>画像.jpg<> 1<>名前<>メールアドレス<>画像.jpg<> --------------------- よろしくお願いいたします。

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.2

私は外部ファイル読み込みにLoadVarsを使っており、以下はその場合の話となります。 LoadVarsでは、 1.ファイルを読み込み終わったとき 2.1のあとファイルをを解析し、自動で変数に格納し終わったとき の処理を指定することができます。 2を使う場合にはa.txtのような形式にする必要がありますが、 1を使うなら好きな形式にし、読み込んだ内容を受け取って自分で加工することができます。 参考URL内の(3)を応用(区切り文字を「=」から[<>]に変更)して頑張ってみてください

参考URL:
http://hima.chu.jp/flash/tips/loadvars.htm
hahaha01
質問者

お礼

アドバイスありがとうございます。 参考URLで少し道が開けた感じがいたします!! 通常のテキストファイルも(2)で読み込めると書いてますし、 (3)では改行コードで分けられることもありますね!! 参考に頑張ってみます!ありがとうございました。

  • swqamy
  • ベストアンサー率37% (11/29)
回答No.1

質問ですが、単純に SAMPLE2=2,名前,メールアドレス,画像.jpg SAMPLE1=1,名前,メールアドレス,画像.jpg とテキストファイルに書いて、Flashに読み込み、 読み込んだ変数「SAMPLE1」、「SAMPLE2」をsplitで区切っても 出来なかったのでしょうか?

hahaha01
質問者

補足

ご意見ありがとうございます。 ご質問にある以下の形式のファイルであれば、読み込みは成功しております。 ----------- SAMPLE2=2,名前,メールアドレス,画像.jpg SAMPLE1=1,名前,メールアドレス,画像.jpg ----------- 上記は「変数名=値」の形式ですから、理解できるんですが、 下記テキストには「=」もないしflashからみれば、ただの 文字列にしかならないのではないかと考え、そうなれば どうやって読み込むのか?となりました。 ----------- 2<>名前<>メールアドレス<>画像.jpg<> 1<>名前<>メールアドレス<>画像.jpg<> ----------- これを1行がひとかたまりとして認識させ、値を読み込む のかが知りたく、投稿させていただいたしだいです。 よろしくお願いいたします。