こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

LoadVarsで外部テキストファイルを読み込み数値化するには?

初級の質問で申し訳ありません。

外部に、data.txtというファイルを用意し、中には
a=1&b=2&c=3&d=4&e=5&f=6
というテキストデータのみを入れました。
(改行は入っていません。)

Flashのタイムラインのフレーム1に、下記コードを記入したのですが、どうしても数値として認識してくれないようで、トレースで表示されるt5は、常に0が表示されてしまっています。
--------------------------------------
System.useCodepage = true;
var Mynum = new LoadVars();
Mynum.load("data.txt");
Mynum.onload = function(success) {
if (success) {
t1= Mynum.a;
t2= Mynum.b;
t3= Mynum.c;
t4= Mynum.d;
t5= Mynum.e;
t6= Mynum.f;
}
};
trace(Number(t5))
stop();
--------------------------------------
これから先、t1やt5などに数値演算をして、色々計算をさせたいのですが、どうも数値として認識されていないようです。
(パブリッシュのFlashPlayerのバージョンを5にしたり6にしたり7にしたりしてみると、表示されるトレースのt5は、0だったり、NaNだったりになってしまいます。)

外部データは全てテキストとして読まれるので、
NumberやparseIntで数値化する、とネットで調べて記載したのですが、
他に何か悪い点がありますでしょうか?

ご教授頂ければ幸いです。
よろしくお願いいたします。

投稿日時 - 2008-04-04 04:07:59

QNo.3920617

すぐに回答ほしいです

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

> トレースで表示されるt5は、常に0が表示されてしまっています。

それは,
根本的に LoadVars を使う意味と,
プログラム実行のタイミングを理解されていないからです。


外部テキストを "読み込んでから" でないと,
そのデータを t1~6 などに代入したり,
その他色々なことに使えないから,
LoadVars.onload で読み込み完了を待っているわけですよね。

書かれていらっしゃるスクリプトの流れと,
実際にプログラムが動作する流れを図示します。

 //LoadVarsインスタンスの作成
 var Mynum = new LoadVars();
       ↓
 // 外部テキストのロード(命令だけ)
 Mynum.load("data.txt");
       ↓
 // ロードが完了したときの動作定義
 Mynum.onload = function(success) { … }
       ↓
 // t5 の出力
 trace(Number(t5))
       ↓
     ずっと後
       ↓
 外部テキストのロードが完了する
       ↓
 Mynum.onload = function(success) { … }
 の { … } が実行される

したがって,
ロード完了前に trace(Number(t5)) を実行していることになります。
ロード完了前に trace(Number(t5)) を実行しても,
外部テキストはロードされていないので,t5には外部テキストのデータは入りません。

投稿日時 - 2008-04-04 06:41:41

お礼

素早いご丁寧なお返事ありがとうございます。

なるほど。基本的な事を理解していなくてすみません・・・。

コードを下記の通りにしましたら、なんとか数値が入りました。

System.useCodepage = true;
var Mynum = new LoadVars();
Mynum.load("data.txt");
Mynum.onload = function(success) {
if (success) {
t1= Mynum.a;
t2= Mynum.b;
t3= Mynum.c;
t4= Mynum.d;
t5= Mynum.e;
t6= Mynum.f;
trace ("せいこう");
trace (Number(t5));
}
};
stop();

さらに基本的な事なのでご質問大変心苦しいのですが、
上記のtrace (Number(t5));の行を、
2フレーム目を作ってそこにスクリプトを書いても
うまく数値が入りませんでした。
ロードが完了、というのは、1フレーム目が終わっても
(次の2フレーム目に行っても)
完了した事にはならないのでしょうか?

取り急ぎ大変ありがとうございました。

投稿日時 - 2008-04-04 18:34:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#1です。

> ロードが完了、というのは、1フレーム目が終わっても
> (次の2フレーム目に行っても)
> 完了した事にはならないのでしょうか?

知りません。
つまり,
誰もそんなことはわかりません(神でもわかりません)。

外部テキストロード完了に,
0.00001 秒かかるかもしれませんし,百万年かかるかもしれません。
(実際は 0.001秒~数十秒くらいだとは思いますが。)

とにかくそのようなことは,
外部テキストのファイル容量や,
回線の混み具合や,
電話回線か光ケーブルかや,
サーバの調子や,などなど....
によって変わるので誰もわかりません。

最初に
stop();
をかけてから 外部テキスト を ロード して,
Mynum.onload = function(success) { … };
の { … } 内で,
gptoAndPlay(2); や gotoAndStop(2); などをすれば良いのではないでしょうか。

そういうことをするために,
LaodVars.onload イベントハンドラメソッドがあるのです。

ですから,
最初(#1の最初)に書きましたように,
根本的に "LoadVars を使う意味" と,
プログラム実行のタイミングを理解しましょう。
つまり,
"なぜそれをしているのか"
意味を理解したうえでスクリプトを使うようにしましょうということです。

投稿日時 - 2008-04-04 19:03:59

お礼

丁寧にご回答ありがとうございます。

了解です。
初心者の質問でちょっと何だかな・・・という所あったかと思いますが、とても助かりました。

こういう場所があるのは良いですね。

改めて本当にありがとうございました。

投稿日時 - 2008-04-04 20:49:24

あなたにオススメの質問