• ベストアンサー

外部テキストから読み込んだ引数をabc順に変数に入れる

グラフィック書籍のカタログのようなサイトをflashで作っています。 一覧をabc順で表示させるときに外部テキストから読み込んでダイナミックテキストへ名前を表示させているのですが、後から追加した場合に大量の引数を変更しなければならず大変手間がかかります。 現在以下のようにしています。 name_1=aa &name_2=bb &name_3=cc &name_4=dd &name_5=ee これにabという名前を追加した場合にab以下をひとつずつ手作業で変更しなければならず困っています。 abc順でなくともいいのですが、あとから追加した場合に後ろの引数が自動的にひとつずれるような書き方はできますでしょうか? または自動的に書き換えられるエディタなどのソフトウェアはありますか?

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

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

ツールを探すより、変数を大量に読み込まなくても済むように工夫してみてはいかがでしょう。 一覧を表示したいだけなら、変数をズラズラと並べて読み込まなくても、ActionScript でもっと簡単にできます。 例えば、テキストファイル”title_src.txt”に、  title_list=aaa,bbb,αβγ,あいうえお,グラフィック入門 このように、タイトルだけを” , ”で区切って並べておくとします。 このファイルを読み込むと、Flash には title_list という変数が読み込まれます。 title_list を、String クラス( Flash MX 以前ではオブジェクト)の split メソッドを使って、” , ”を区切り文字として分割します。 分割した文字列は、配列変数に1つずつ格納されます。 この配列変数が、仮に”list”という名前だとすると、list の内容は  list[ 0 ] → aaa  list[ 1 ] → bbb  list[ 2 ] → αβγ  list[ 3 ] → あいうえお  list[ 4 ] → グラフィック入門 となります。 Flash MX 以降は、テキストフィールドも ActionScript で細かく制御できるようになりました。 テキストフィールドには、表示する内容を管理している text というプロパティがあります。書き換えると、テキストフィールドに表示する内容を更新できます。 配列変数は連番になっていますし、配列変数内にいくつ変数があるか(つまり、リストにするタイトルがいくつあるか)は、length というプロパティを見ると分かります。 この2点を利用し、for ループで text プロパティに配列変数に入っているタイトルを1つずつ順に連結していくと、リストの形で表示できます。 単純に連結していくと、全てのタイトルが詰まって見にくくなりますので、1タイトルごとに改行を挿入していくといいでしょう。 仮に、テキストフィールドのインスタンス名を”disp”とします。 タイトルのリストを読み込み、このテキストフィールドに表示するスクリプトは、大体、次のようになります。 このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  //テキストの読み込み  System.useCodepage = true;  this.loadVariables( "title_src.txt" );  //読み込み完了時の処理  this.onData = function()  {   //読み込んだテキストを” , ”で分割   list = new Array();   list = title_list.split( "," );   //テキストフィールドに表示   for( i = 0; i < list.length; i++ )   {    disp.text += list[ i ];    //最終行以外は改行を挿入    if( i != list.length - 1 )    {     disp.text += "\n";    }   }  };  //タイムラインはここで止める  stop(); ---------------------------------------------- タイトルを” , ”で区切って列挙するだけなら変数の番号は関係ありませんから、タイトルが増えたり減ったりした時も修正は簡単です。 ただし、読み込むテキストファイルが、タイトルが表示したい順に並べられていることと、1つ1つのタイトルが” , ”など、何か特定の区切り文字で区切って記述されていることが条件となります。 タイトル数が少ないのであれば手作業でも構いませんが、多い時は、Excel などの表計算ソフトを使うと便利です。 Excel では、列ごとのデータを” , ”で区切る「 CSV 形式」で書き出すことができます。 タイトルを、列ではなく行方向に入力し、昇順または降順に並べ替えます。 できたシートを CSV 形式で保存し、メモ帳などで開いてください。 データが  aaa,bbb,αβγ・・・ というように” , ”で区切られていることを確認したら、Flash で読み込めるように、文字列の最初に変数名を追加します。  title_list=aaa,bbb,αβγ・・・ このファイルをテキストファイル(拡張子: txt )として保存して、できあがりです。 なお、Excel で CSV 形式で書き出すと、行末に改行が入っていることがあります。 改行が入っていると、Flash で表示する時に意図しない改行が入りますので、削除してから保存してください。 ---------------------------------------------- Flash で表示する時に、1つのテキストフィールドではなく、1タイトルにつき1つのテキストフィールドを用意している場合は、テキストフィールドのインスタンス名の付け方を工夫することで対応できます。 例えば、テキストフィールドのインスタンス名を txt0 ~ 4 と、固定の名前+通し番号で付けると、文字列からインスタンスを指定できる配列演算子 [ ] を利用して  //テキストフィールドに表示  for( i = 0; i < list.length; i++ )  {   this[ "txt" + i ].text = list[ i ];  } として、全てのテキストフィールドの表示内容をまとめて更新できます。 配列変数の管理番号(インデックスといいます)は 0 から始まります。 テキストフィールドの名前も 0 から振っておくと、表示する配列変数のインデックスと1対1に対応するので、分かりやすくなります。 タイトルが入っている配列変数は、ComboBox や List コンポーネントを利用して表示する時や、番号に対応させてタイトルを参照する場合など、他にも様々な使い道があります。 あまり細かいことを言わなければ、sort や sortOn メソッドで昇順・逆順の並べ替えも可能です。 リストに表示するタイトルをリンクにして、クリックした時に特定のフレームや HTML ページを表示したい、といった場合は、テキストファイルで変数を読み込むだけでは限界があります。 この場合は、XML を利用し、タイトルとリンク先をセットにしてリストを作った方が、効率的だと思います。 XML は、この手のリストを記述することを得意とする言語です。 変数の通し番号をいちいち振り直しながら書き直すことなく、タグを付けて項目を増減するだけでリストを記述できます。 Flash に XML を読み込む時は、loadvariables ではなく、XML クラスという専用のクラスを使い、読み込んだリストの構造を解析します。 興味がありましたら、研究してみてください。

ryotatronica
質問者

お礼

回答ありがとうございました。 うまくいきました。 配列の使い方を知らなかったのですが、 とても役に立ちますね。 教えていただいたスクリプトを元にいろいろできそうです。 XMLにもチャレンジしてみようとおもいます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#35109
noname#35109
回答No.3

#1です。 補足です。 表計算ソフトはExcelしか使ったことがないため,他のソフトのことはよくわかりません。そのExcelについての補足です。 説明の都合上,#1では,A列とB列を使って, = "name_1=" & A1 & "&" = "&name_2=" & A2 & "&" のように全てを書いていますが,実際はこれでは汎用的ではありません。 "name_" の部分などは,他のセルに「name_」などと書いておいて,そのセルを参照するようにしておくと,変数名にどんな名前が来ても全ての変数名が一瞬で全部変えられます。 1,2,…などの部分も,いちいち書くのではなくて,方法はいろいろありますが,工夫次第で楽に"name_" の後に連番で挿入できます。 また,データが1種類の場合,A列B列でも良いのですが, 書籍名 出版社名 定価 … など,複数ある場合は,入力用シートとFlash用出力シートを別に用意しておくと,使いやすいです。 でも,こんなのになってくると,#2さんが後半で言われているXMLの方が良くなってきますね。 -------------------------------------- あと,#2さんの書かれているCSVへの保存ですが, Excelは,縦(列)向きにはオートフィルタやソートなど処理がしやすいようにできていて,横(行)向きにはなかなか使いにくいです。 でも,ソートに関しては横向きにも処理出来ます。 ソートしたい行を選択→「データ」→「並べ替え」→「オプション」を選択します。 並べ替えオプションダイアログが出てくるので,「方向」を「列単位」にチェックを入れ,「OK」。 並べ替えする行を指定して,ソートすれば列が入れ替えできます。 また,Excelの行は65536行と,普通に使うにはだいたい間に合う行数を持っていますが,列は256列しかありません。 データが256個を越える場合は,データを普通通り縦向きに並べて処理をし,250くらいずつ選択→「コピー」で別シートまたは別ファイルに,「形式を選択して貼り付け」で「行と列を入れ替える」にチェックを入れ,「OK」。 と言う感じにコピーし,複数行にしておいて,CSVファイルで保存し。 あとは,テキストエディタで手動で改行を削除してカンマを入れることが必要になると思います。 Excel(など表計算ソフト)は便利ですよ。書籍名以外にその出版社や定価や著作者などのデータを入れておくと,出版社順のさらに書籍名順など工夫しだいで色々操作ができます。 それで,必要なデータだけをFlashに読み込ませれば良いのです。

ryotatronica
質問者

お礼

詳細に教えていただいてありがとうございます。 普段エクセルを使わないので このような使い方があるとは知りませんでした。 #2で教えていただいたスクリプトとエクセルでうまくいきそうです。

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.1

私はマイクロソフトのExcelを使っています。 B列に関数として B1セルから順に = "name_1=" & A1 & "&" = "&name_2=" & A2 & "&" = "&name_3=" & A3 & "&" = "&name_4=" & A4 & "&" = "&name_5=" & A5 & "&" = "&name_6=" & A6 & "&" = "&name_7=" & A7 & "&" = "&name_8=" & A8 & "&" = "&name_9=" & A9 & "&" = "&name_10=" & A10 & "&"    …   …    …   … みたいなのをあらかじめ用意しておいて, A列に書籍名?を aaa bbb ccc ddd aac bbc aff と適当に書いていきます。 この状態で B列は自動的に name_1=aaa& &name_2=bbb& &name_3=ccc& &name_4=ddd& &name_5=aac& &name_6=bbc& &name_7=aff& のようになっています。 それでA列だけを選択, 「データ」→「並べ替え」 で「優先されるキー」を「列A」にして「昇順」にチェックを入れ「OK」で B列は自動的に name_1=aaa& &name_2=aac& &name_3=aff& &name_4=bbb& &name_5=bbc& &name_6=ccc& &name_7=ddd& となります。 このB列だけを,テキストエディタにコピーすればOKです。 データの最後の"&"は不要だったら,入れなくて良いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • argv( 引数 )について

    こんにちは、質問させてください。 今test.phpに引数をひとつ渡します。 test.php内では、 $name = $_GET["name"]; として受けています。 test.phpは、引数がNULLの時とそうでないときで 別処理を行うようにしています。 PHP.iniファイルのエラーメッセージを表示させるように設定していて、 引数が存在しないときに以下のようなメッセージがエラーログファイルに追加されます。 Undefined index: name in c:\htdocs\test\test.php on line 12 このメッセージが表示されること自体、たいしたエラー(?!)ではありませんが、 引数がない場合、実行する度に上記のメッセージがでるのはあまり 面白くないので、表示させたくないようにしたいのですが, どのようにすればいいでしょうか? 宜しくお願い致します m(_ _)m

    • ベストアンサー
    • PHP
  • 日付順にテキストを開いて書き込むエクセルマクロ

    あるフォルダの中に「abc#1xyz_201308.txt」という形のテキストファイルがあり、 ボタンを押すと、直近1年分のファイルに対して中身のデータをシート3に書き込むような マクロを作りたいのですが、直近1年分のものに対して所定の操作を行うやり方が分かりません 例として、「C:\Users\Owner\Documents」に「abc#1xyz_201308.txt」の形のファイルが 1年以上分ある場合で教えていただけますか? (テキストは日付以外は同じ名前、つまりabc#1xyz_201307.txtやabc#1xyz_201306.txtが存在し それ以外の名前のものはこのフォルダにはありません。またフォルダ内には順番通り入っていませんが シートに書き込むのは古いものから順にしたいです)

  • テキストに入力してある単語の順番を名前順にしたい

    Macのテキストファイルに名前・単語(主にアルファベット)を記入、改行してまた次の単語を入力してあり、頭文字の順番がバラバラなので自動でアルファベット順に直せる方法を探しています。 例) BAC ACB ABC CBA  の並びを ABC ACB BAC CBA  な具合に頭文字から順に並び替え 調べてみるとテキストエディタ内では出来ないらしく、エクセルも入っていません。(並び替えだけしたいのでフリーソフト又は既存のソフトでの方法で探しています) Libre Officeというフリーソフトはエクセルと同じような作業ができるようですが、OSが対応しておらず使えなさそうです。(使用環境  Mac OS X10.7.5) なにか良い方法は無いでしょうか?

    • ベストアンサー
    • Mac
  • 外部読み込みテキスト内の変数について

    初めてPHPでフォームメールを作成しています。 送信メール内容のフォーマットを 外部テキストで読み込む形にしたいと考え 変数名を含む外部テキストファイルを作成しました。 ファイル名(bace.txt) ++++++++++++++++++++++++++++ お名前 :{$name} メールアドレス:{$from} タイトル :{$title} 内容 :{$body} ++++++++++++++++++++++++++++ これを以下のようにbace.txtを読み込んでmb_send_mailでメールを送っているのですが・・送られたメールを確認すると変数名がそのまま表示されてしまいます。多分文字列として扱われたままでおくられてしまっているのかな?どなたか解決方法分かる方教えて下さいませ~~>< function screen_submit($param) { global $smarty; extract($_SESSION["prm"]); $fp=fopen("bace.txt","r") or die("ファイルのオープンに失敗しました"); $temp=fread($fp, filesize("bace.txt")); $rc = mb_send_mail(MAIL_TO, $title, $temp, "From:$from"); $rc = mb_convert_encoding($rc,"EUC","AUTO"); fclose($fp); if ($rc) { $message = "メール送信が正常終了しました。"; } else { $message = "メール送信が失敗しました。"; } $smarty->assign("message", $message); return TRUE; }

    • ベストアンサー
    • PHP
  • テキストデータを日付順に並べ替えたい

    テキストデータを日付順に並べ替えたい どのようなデータと言いますと。 果物 ("さくらんぼ" "2010-9-11") 果物 ("ぶどう" "2005-3-26") 果物 ("みかん" "2010-8-1") 果物 ("りんご" "2009-1-11") の様に一行に名詞か何かがあってその後ろに日付が表示されています。 これを日付順にしたいのですが、1000行以上あるので1行づつ何か操作するのは大変です。 何か簡単に日付順にする方法はないでしょうか。word・Excelはあります。

  • FMPro7『テキスト+数字』フィールドのソートができません。

    ファイルメーカーPro7でデータベースを作成し、シリアル番号を入力しています。 17ABC001、17ABC002、17ABC003 … という具合に『年度+固有記号+通し番号』としているのですが、 これを通し番号順にするためソートをかけたところ、まるででたらめに並んでしまいます。 フィールドタイプはテキストで、全て半角で入力してあります。 データベース作成途中に追加したフィールドなので、自動入力にはしてません。 どうしたら解決できますか? どなたか助けてください(>_<;)

  • OpenOffice Basicで引数を2つ利用する関数が作れません

    OpenOffice Basicで引数を2つ利用する関数が作れません Open Office Calc 3.1.1を使っています。 できれば複数(3つ以上)引数を取る関数を作りたいのですが、 2つ引数を取ろうとすると演算結果が#NAME?になってしまいます。 切り分けにシンプルな関数を作ってみました。 以下で=test2(3,5)とすると結果が#NAME?になります。 Function test2(arg1 As Integer, arg2 As Integer) as Integer test2 = 3 + arg2 End Function #なお、関数内の演算内容はtest2 = arg1 + arg2でも変わらず#NAME?です 切り分けで以下を作ると=test3(3)で6が返されます Function test3(arg1 As Integer) as Integer test3 = 3 + arg1 End Function 関数名のタイプミスの可能性を排除するために、 test2関数を名前を換えずに引数の数を1つに変更してみると 計算できるのでタイプミスではないと思います。 やはり引数を複数とる取り方に問題があるように見えます。 お手数ですが何かアドバイスいただけないでしょうか?

  • 入力フォームにテキストを追加

    JavaScriptについての質問です。 入力フォームで、テキストを入力する点滅する棒(以下、棒と表記)がある位置にテキストを入力したいのです。 例:「abc|de」に「A」を追加   「c」と「d」の間に棒があるので、「abcAde」となる また、入力フォームで、反転されているテキストの両端にテキストを追加つる方法も分かりません。 例:「ab|cd|e」に「A」と「B」を追加   「cd」が反転しているので「abAcdBe」となる ブログ作成なんかでよく見かけると思います。 どなたか分かる方がいたら、ご教授お願いします。

  • Tablacus Exp.でフォルダ順を変更

    Windows標準のExplorerではなく、Tablacusなるファイラを使っていますが、あるフォルダだけ何か表示方法を変更したためか、フォルダ、ファイル一覧を表示させた時に今日、昨日、かなり前とかアクセスした日の後にフォルダ、ファイル一覧が分けて表示されるようになってしまいました。私としてはファイルやフォルダにアクセスした日はどうでもよくて、単純にフォルダをABC順で続いてファイルをABC順に並んでほしいのですが、Tablacusの使い方がよく分かっていないのでどうやれば元に戻せるのかわかりません。なお、そのフォルダ以外はABC順に並んでいます。 対処方法をご存知であれば教えてください。

  • iTunesでトラック順に表示されない

    iTunesバージョン7に更新して、それ以降オムニバス のようなアルバムを追加してもアーティストのABC 順に表示され、トラック順に表示されず、ipodにも iTunesと同じ順に表示されてしまいます。 ちなみにプロパティのトラック番号はすべてついています。

このQ&Aのポイント
  • Andoroidタブレットなのですが、最大ボリュームの制限をなくさないと、アプリで最大ボリュームを上げるだけでなく、アクティブスピーカーでボリュームをあげてもシステムの方のボリュームが下がるのですが、これはどういう仕組でしょうか?
  • 特定のアプリでボリュームブーストアプリを利用してもボリュームが上がらない場合や、開発オプションにも最大ボリュームの項目がない場合、アクティブスピーカーをつないでボリュームをあげてもボリュームが上がらないことがあります。なにかタブレットとスピーカーの間に機器をかませて、タブレットの元ボリュームを下げずに接続した機器からボリュームを上げる方法はありませんか?
  • Andoroidタブレットでスピーカーをつなげると、アプリでボリュームを上げたり、アクティブスピーカーを使ってボリュームを上げたりしても、システムのボリュームが自動的に下がる現象が起こります。この仕組みについて詳しく教えてください。
回答を見る