メイン コーダーズルーム【スクリプト系】 onDataで作成した配列を参照したい | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
takamasa | Åê¹ÆNo.46060 投稿日時: 2010-10-11 12:02 |
新米 居住地: 北海道 投稿: 6
使用環境:
Windows Vista Flash Pro8 |
onDataで作成した配列を参照したい 初めましてtakamasaと申します。
最近はじめたばかりのド素人です。 今回が初めての投稿です。よろしくお願いします。 質問の内容ですが、csvファイルを読み込み、onDataイベント内で多次元配列を作成して、今後はその配列から文字を取得して処理を行いたいと考えております。 具体的には以下のコードを書いております。 なお、ActionScript2.0を使用しております。 // // スクリプトクラス(CSVファイル読み込み) // class SCRIPT { /*------------------------------------------------------------* | <<< 変数宣言>>> *--------------------------------------------------------------*/ private var csvObj; // CSVファイル読み込み用 private var aCsvStr:Array; // 読み込んだ文字列格納用 private var bFinish:Boolean = false; // 読み込み終了フラグ /*-------------------------------------------------------------* | <<< コンストラクタ >>> *--------------------------------------------------------------*/ public function SCRIPT() { csvObj = new LoadVars(); aCsvStr = new Array(); } /*-------------------------------------------------------------* | <<< CSVファイルを読み込みます >>> | 機能 : CSVファイルを読み込みます | 引数 : path CSVファイルまでのパス | 戻り値 : なし *--------------------------------------------------------------*/ public function LoadCsv(path:String):Void { csvObj.load(path); //読み込み時に入るイベント csvObj.onData = function(csvstr:String) { // myCSV を "改行コード" で split して配列を得る aCsvStr = csvstr.split("\r\n"); for(var i:Number = 0; i <aCsvStr.length; i++) { aCsvStr[i] = aCsvStr[i].split(","); } bFinish = true; trace(aCsvStr[0][0]); //traceしてみる } } /*-------------------------------------------------------------* | <<< 読み込み終了チェック >>> | 機能 : 読み込みの終了をチェックします。 | 引数 : なし | 戻り値 : なし *--------------------------------------------------------------*/ public function LoadCheck():Boolean { return bFinish; } /*-------------------------------------------------------------* | <<< 読み込み中のパーセントを得る >>> | 機能 : 現在の読み込み率を%で得る | 引数 : なし | 戻り値 : なし *--------------------------------------------------------------*/ public function GetReadPercent():Number { return Math.floor(csvObj.getBytesLoaded() / csvObj.getBytesTotal() * 100); } /*-------------------------------------------------------------* | <<< 列と行を指定して文字列を取得します >>> | 機能 : csvファイルから指定した文字列を取得します | 引数 : col 行 | : row 列 | 戻り値 : csvファイルの文字列 *--------------------------------------------------------------*/ public function GetStr(col:Number , row:Number):String { return aCsvStr[col][row]; } } というような感じで書いており、メインタイムラインの1フレーム目で呼び出して使用しております。 //1フレーム目の内容 import SCRIPT var script = new SCRIPT(); script.LoadCsv("csv_file/sample1.csv"); _root.onEnterFrame = function() { if(script.GetReadPercent() == 100) { trace(script.GetStr(0 , 0)); } } これを実行いたしますと、onData内のtraceではcsvファイルから読み込んだ文字列が格納されているのですが、1フレーム目のGetStr(0,0)を使用してtraceした箇所ではundefinedとなってしまいます。 なお、GetReadPercent()という関数はきちんと動作しておりました。 1フレーム目で配列に格納した文字列を参照できるようにするにはどうすればよいでしょうか? どなたかご教授をお願いいたします。 |
ひろゆき | Åê¹ÆNo.46061 投稿日時: 2010-10-11 14:02 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: onDataで作成した配列を参照したい スクリプト内に全角スペースやタブ・インデントが混じっているようですが、
それを半角スペースに置換して、問題なくスクリプトが実行される環境で試されるのが先でしょう。
|
takamasa | Åê¹ÆNo.46062 投稿日時: 2010-10-11 14:47 |
新米 居住地: 北海道 投稿: 6
使用環境:
Windows Vista Flash Pro8 |
Re: onDataで作成した配列を参照したい ご回答ありがとうございます。
ご指摘のあった通り、すべて半角スペースに直した後で 同じコードを実行致しましたが、結果は同じでした。 onData内で配列をtraceして表示するときちんと表示されますが、 それ以外の箇所で行うとundefinedとなります。 |
ひろゆき | Åê¹ÆNo.46063 投稿日時: 2010-10-11 14:56 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: onDataで作成した配列を参照したい きちんと変数が渡っているかどうかは、traceしまくれば分かります。
例えば、以下のようにすると、aCsvStrも、bFinishも、undefinedです。
スコープの問題ですね。 「for文とボタンアクション」 「Buttonのthis」 「forループでMovieClipに設定したイベントハンドラメソッドから変数を参照する」 「Delegateとスコープ (1)」 「Delegateとスコープ (2)」 「Delegateとスコープ (3)」 「Delegateとスコープ (4)」 クラス名は、大文字から、メソッド名は、小文字から始めるのが通例だと思います。 なので、全面的にスクリプトを書き換えました。 [case1] _root 第1フレーム
CSVLoader.as
[case2] _root 第1フレーム
CSVLoader.as
[case3] _root 第1フレーム
CSVLoader.as
|
takamasa | Åê¹ÆNo.46064 投稿日時: 2010-10-11 17:34 |
新米 居住地: 北海道 投稿: 6
使用環境:
Windows Vista Flash Pro8 |
Re: onDataで作成した配列を参照したい 改善案をいくつもご提示いただいた上に、参考になるWebページの情報まで教えていただきありがとうございます。
おかげ様でやりたかったことができました。 ひろゆき様、本当にありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |