- ベストアンサー
特定できない配列の受け渡し
- 特定できない配列の受け渡しについて質問です。外部から取得した不特定多数の文字列を配列として格納し、個別に呼び出す方法を知りたいです。
- 配列から抜き出した値を元にテキストデータを読み込んで表示する方法を教えてください。
- 取得した文字列から読み込みファイルへのパスを取得し、テキストで表示させたいです。具体的な方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Flash の配列は, あらかじめ要素(エレメント)数を決めておく必要もありませんし, 後からいくらでも変えられるのですごく便利で楽です。 単なる一例ですが, 次のようなスクリプトで外部データを違うテキストフィールドに代入することができます。 ---------------------------------------- // LoadVarsクラスのインスタンスを作成 myload = new LoadVars(); // 外部データがロードされたときの動作定義 myload.onData = function(moji) { // 外部データを 「,」 でsplit した要素の配列を作成 myArray = moji.split(","); // 配列の要素数を取得 mylen = myArray.length; // 要素数分のテキストフィールドの作成と値の代入 for (i=0; i<mylen; i++) { // テキストフィールドを作成 _root.createTextField("my_txt"+i, i, 20, i*30+20, 100, 22); // (見えるようにテキストフィールドの枠線を入れておきます) _root["my_txt"+i].border = true; // テキストフィールド別に配列の各要素を代入 _root["my_txt"+i].text = myArray[i]; } }; // 外部データのロード myload.load("mydomain/配列から抜き出した値.txt"); ---------------------------------------- 上のように, とりあえず何でも良いからデータを「,」で split して, 配列(myArray)にぶちこんでやります。 すると,その要素数からデータ数(mylen)が求められます。 要素数(mylen)が求められたら, その要素数分のテキストフィールド(my_txt0 ~ my_txt?)を作成して, 各テキストフィールド(my_txt0 ~ my_txt?)に, 各要素(myArray[0] ~ myArray[?])を代入すれば出来上がり。 という流れでできます。 先にデータ数を求めておいてから, 配列の要素数を決定し, 配列の各要素にデータを入れることしかできないような言語では, これはスーパーミラクルに画期的なことに見えるかもしれません。 それと, // 外部データを 「,」 でsplit した要素の配列を作成 myArray = moji.split(","); に関してですが, 配列を new Array(); で作成していないのに myArray は配列? と思われるかもしれませんが, split (String.split メソッド)は, String オブジェクトを指定した区切り記号でサブストリングに分割し, そのサブストリングを要素としたデータを配列として返します。 したがって, new Array(); を書かなくても,勝手に配列オブジェクト myArray が作成されます。 とにかく Flash の配列は無茶苦茶便利なので, データを扱うときは頻繁に使います。 多くの方がすぐに配列を使いたがるのはそのためです。 ※ なお配列とは関係がありませんが, Flash 8 からは, createTextField() や createEmptyMovieClip() を使う際に, 戻り値として新しく生成されたテキストフィールドやムービークリップへの参照が返るようになりましたから, FlashPlayer8 以上の SWF にパブリッシュするという条件であれば, 上のスクリプトの for文 内を次のように書くこともできます。 for (i=0; i<mylen; i++) { // テキストフィールドを作成 TXT = _root.createTextField("my_txt"+i, i, 20, i*30+20, 100, 22); // (見えるようにテキストフィールドの枠線を入れておきます) TXT.border = true; // テキストフィールド別に配列の各要素を代入 TXT.text = myArray[i]; } これの方が簡単と言えば簡単です。 しかし簡単であっても, 一応は本当のテキストフィールドのインスタンス名を知っておかなければ, その後色々と操作ができないので,こちらの書き方はしていません。 ===================== すみません。 以下は前回回答した件についての補足です。 先日ご質問で私が#3で回答したURLのページですが, http://okwave.jp/qa3705356.html (↑この#3で書いたURL) よく見ると間違っている部分というか変な部分が2箇所ありました。 細部までよく見ずにURLを書いてしまってすみません。 まず LoadVars のスクリプト順が変です。 この回答の上で書いたように, // LoadVarsクラスのインスタンスを作成 ↓ // 外部データがロードされたときの動作定義 ↓ // 外部データのロード の順にコードを書くのが正しい書き方です。 前回のURLページにあるように, // LoadVarsクラスのインスタンスを作成 ↓ // 外部データのロード ↓ // 外部データがロードされたときの動作定義 のような順でコードを書くと, 外部データがロードされたときの動作定義が済む前に, 外部データのロードが完了してしまう可能性があります。 定義前にロードが完了してしまったら, せっかく定義したスクリプトが実行されなくなってしまいます。 普通はそのようなことはないので, どちらでも構わないと言えばどちらでも構わないのですが, 理論上の可能性を考えた場合, ロードする前にロードされたときの動作定義をしておく方が良いです。 あと,前回書いたURLのページで, 「CSVデータの拡張子は「.txt」に変更しておくこと。」 というようなことを書いていますが, その必要は全くありません。 ファイルの拡張子なんて何でもいいのです。 CSV は 拡張子 .csv のままでも当然OKですし, 中身は CSV でも,拡張子は .exe にしてもかまいません。 何でしたら,拡張子など無くても良いです。 ロードするときに, つまり例えば, myload.load("mydomain/配列から抜き出した値.txt"); を書くときに, 「配列から抜き出した値.txt」 なのか 「配列から抜き出した値.csv」 なのか 「配列から抜き出した値.exe」 なのか 「配列から抜き出した値」 なのか, 人間がファイル名を書きまちがえなければ良いだけです。 ~~~~~~~~~~~~ ちなみに, CSVの場合は,縦向きのデータを改行コードで split する必要がありますが, 改行コードは保存するソフトや設定によって変わります。 Windows の メモ帳 で, あいう かきくけ さし たちつて というデータを書き, デフォルトの設定で「配列から抜き出した値.xxx」を保存したとします。 そのとき文字コードは Shift-JIS で,改行コードは \r\n になります。 この場合, この回答の最初で書いたスクリプトを修正するとするなら, 次のように修正する必要があります。 ---------------------------------------- // テキストデータを Shift-JIS として扱う ★ System.useCodepage = true; // LoadVarsクラスのインスタンスを作成 myload = new LoadVars(); // 外部データがロードされたときの動作定義 myload.onData = function(moji) { // 外部データを 「\r\n」 でsplit した要素の配列を作成 ★ myArray = moji.split("\r\n"); // 配列の要素数を取得 mylen = myArray.length; // 要素数分のテキストフィールドの作成と値の代入 for (i=0; i<mylen; i++) { // テキストフィールドを作成 _root.createTextField("my_txt"+i, i, 20, i*30+20, 100, 22); // (見えるようにテキストフィールドの枠線を入れておきます) _root["my_txt"+i].border = true; // テキストフィールド別に配列の各要素を代入 _root["my_txt"+i].text = myArray[i]; } }; // 外部データのロード (ファイル名の拡張子がxxxの場合) myload.load("mydomain/配列から抜き出した値.xxx"); ---------------------------------------- ★を付けた行を変更や付け加えしています。 ソフトによっては, 改行コードが \n だけのものもありますし, メモ帳でも設定をすれば文字コード UTF-8 で保存できます。 データを保存するソフトや設定によってスクリプトは変わるので, その辺のところを注意してください。 http://www.google.co.jp/search?hl=ja&q=%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89+%5Cr%5Cn 以上,長々と書いてすみません。
お礼
ご解答有難うございます。 派生で伺いたい事があるのですが、 質問が派生してキリがなくなりますし、 とりあえず当面の目標は達成されたので 一旦質問を閉めさせていただきます。
補足
またもやご丁寧な解答有難うございます。 とりあえず、参照元テキストへの自動出力は自前でなんとかしたので (UTF8でカンマ切りです) これらを参考にゆっくり取り組みたいと思います。