- ベストアンサー
スペースは残し改行のみ削除するには?condenceWhite
テキストフィールドに外部ファイルからテキストファイルを読み込んでいます。 例えば次のようなhtmlタグを含む外部ファイルを読み込みたいとき(アンダーバーはスペースとして見てください) text= 2007.1.1_ほげほげ<br> _________ほげほげ2<br><br> 2007.1.2_ほげほげ<br> _________ほげほげ2 condenceWhite = falseであれば、<br>も含め改行が二回入り、 ================================= 2007.1.1 ほげほげ ________ ほげほげ2 2007.1.2 ほげほげ ________ ほげほげ2 ====================================== と表示されると思います。 改行が二回入るのを防ぐために、condenceWhite = trueにすると、今度は、スペースが消されて ================== 2007.1.1 ほげほげ ほげほげ2 2007.1.2 ほげほげ ほげほげ2 ================== となると思います。 スペースを消さずに余分な改行だけ消す良い方法はないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
スペースを残す方法ではないのですが。 ご提示の例から察するに、更新情報の表示などによく使われている ○○○ □□□□ ___ △△△△△△△△ (↑”_”はスペースの代わりです) というような段組みがご希望なのではないでしょうか。 これでしたら、カスタムタブを使う方法もあります。 タブは少々難しくなりますけれど、プロポーショナルフォント(文字ごとに字の幅が異なるフォント。半角文字と半角のスペースの字幅は同じとは限らない)を使っていても、文章の一部としてスペースを含んでいたとしても、確実に段組みできます。 タブは「アクション」パネルなどでもおなじみの機能で、入れておくと一定の数だけ空白を挿入してくれるものです。 例えばタブ幅を 4 に設定している場合、Tab キーでタブを入れると、タブ1つにつき半角のスペース4つ分の空白が挿入されます。 しかし、タブはあくまでも”タブコード”という目に見えない文字です。 実際のテキストデータでは、半角のスペースが4つではなくタブコードが1つだけ入っています。 ですから、タブを削除する時は挿入されているタブコード1文字だけで済みます。 テキストフィールドでのタブはもう少し高機能で、空いたスペースはただの空白ではなく文字を入れることができます。 つまり、改行コードまでの間にあるタブコードは列の仕切りで、タブ幅はタブコードで区切られる列の幅の指定のようなものです。 例えば a = "○○○\t□□□\n\t△△△△△\n"; このような文字列は、タブ幅を調節すると ○○○ □□□ ___ △△△△△ というように2列に段組みして表示することができます。 タブ幅を設定する方法は2つあります。 Flash Player 6 でパブリッシュする場合は、TextFormat クラス( Flash MX ではオブジェクト)の tabStops プロパティで設定します。 Flash Player 7 以降であれば、tabStops と同等の機能を持つ <TEXTFORMAT> というタグが使えます。 タブコードはスクリプトでは” \t ”で挿入しますが、テキストファイルでは Tab キーでタブコードを挿入するか、水平タブの URL エンコード” %09 ”で記述します。 テキストファイルでは、少々見にくくなる欠点はありますけれど %09 で入れる方が確実だと思います。 -------------------------------------------------------------------- 例えば、テキストファイル” log.txt ”の内容が (↓各行頭に全角のスペースが入っています。コピーする際は削除してください) news_log= 2007.1.1%09<B>新年のごあいさつ</B><BR> %09今年もよろしくお願いします<BR><BR> 2007.2.14%09<B>バレンタイン特集</B><BR> %09家伝のチョコ レシピを大公開!!<BR> だとします。 ステージにダイナミックテキストのテキストフィールド” disp ”があるとして、これに先のテキストファイルから読み込んだ内容を段組みして表示するスクリプトは、次のようになります。 このスクリプトは、メインのタイムラインに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //テキストフィールドの設定 disp.html = true; //タブ幅を設定 format = new TextFormat(); format.tabStops = [ 100 ]; disp.setNewTextFormat( format ); //テキストファイルの読み込み //Shift-JISで読み込む System.useCodepage = true; load_obj = new LoadVars(); load_obj.onLoad = function( success ) { var temp; if( success ) { //読み込んだ文字列内の改行コードを削除する temp = this.news_log; temp = temp.split( "\r" ).join( "" ); temp = temp.split( "\n" ).join( "" ); //できた文字列をテキストフィールドに表示 disp.htmlText = temp; } }; load_obj.load( "log.txt" ); テキストファイルから読み込んだテキスト内の改行コードは、改行コードで分割し、分割したものに何の記号も挿入せずに連結することで削除できます。 condenseWhite プロパティを true にするとタブコードも無視されてしまうようなので、今回はこの方法で改行コードだけを削除します。 タブ幅は TextFormat クラスの tabStops プロパティに設定し、テキストフィールドに適用します。 tabStops に指定するのは配列変数です。 今回は2列の段組みですから、タブ幅の指定は1つで充分です。 2つ以上指定すると3列以上の段組みも可能です。 上記の作例では 2007.1.1 新年のごあいさつ 今年もよろしくお願いします 2007.2.14 バレンタイン特集 家伝のチョコ レシピを大公開!! まあ、ブラウザでは表示フォントによってはズレてしまいますが、実際には日付部分と見出し・記事の部分が2列になっていて、見出しと記事の行頭が揃った段組みになります。 日付を表示する部分(左側の列)が 100 ピクセルで、テキストフィールド全体の幅から 100 ピクセルを差し引いた分が右側の列幅になります。 *************************** Flash Player 7 からは、<TEXTFORMAT> というタグでテキスト内にタブ幅の指定を組み込めるようになりました。 タブ幅の考え方・挿入方法は tabStops を使う場合と同じです。 Flash MX 2004 以降をお使いでしたら、テキストファイルを news_log= <TEXTFORMAT tabstops='[100]'> 2007.1.1%09<B>新年のごあいさつ</B><BR> %09今年もよろしくお願いします<BR><BR> 2007.2.14%09<B>バレンタイン特集</B><BR> %09家伝のチョコ レシピを大公開!!<BR> </TEXTFORMAT> (↑先述のテキストファイルで読み込む内容を、<TEXTFORMAT> タグでくくっています) このように変更してください。 それから、スクリプトでタブ幅を設定している部分である //タブ幅を設定 format = new TextFormat(); format.tabStops = [ 100 ]; disp.setNewTextFormat( format ); この部分をコメントにし、Flash Player 7 以上でパブリッシュして動作を確認してみてください。 スクリプトではタブ幅を設定していませんが、先の作例と同じ結果になります。 -------------------------------------------------------------------- タブ幅は充分な幅を確保してください。 1列のタブ幅を超える長さのテキスト(タブコードを区切りとする部分が1列に表示されます)を表示しようとすると、全体のレイアウトが崩れてしまいます。 タブ幅の単位はピクセルです。 (ヘルプのサンプルにはポイント、TextFormat クラスの tabStops プロパティの項目にはピクセルとありますが、どうもピクセルの方が正解のようです) 使うフォントや文字のサイズにより、必要な幅が変わります。 レイアウトが崩れる時はタブ幅を大きくしてみてください。 <TEXTFORMAT> タグを使ったレイアウトは、Flash 8 のヘルプに作例があります。 罫線や背景は便宜上付いているだけで実際には付きませんが、よろしければご参考になさってください。 ・ Flash ドキュメンテーション:テキストフォーマットタグ http://livedocs.macromedia.com/flash/8_jp/main/00001469.html
その他の回答 (1)
やってみましたが, condenseWhite = true で,半角空白文字は消されてしまいますが, 全角空白文字は残りました。 1つの案ですが, 半角空白文字ではなく, 全角空白文字を使われてはいかがでしょうか。 ==================== また,上の案を, ActionScript で「半角空白文字×2」を「全角空白文字×1」に置換する方法も考えられます。 その方法例は次のようになります。 ※ 外部テキストファイル名=mydata.txt 外部テキストの文字コード=Shift-JIS テキストフィールドのインスタンス名=mytext の場合↓。 ---------------------------------------- System.useCodepage = true; var LV = new LoadVars(); LV.onLoad = function() { mytext.condenseWhite = true; this.text = this.text.split(" ").join(" "); mytext.htmlText = this.text; }; LV.load("mydata.txt"); ---------------------------------------- this.text = this.text.split(" ").join(" "); 識別しにくいですが,split(" ") の " " は半角2個です。 join(" ") の " " は全角1個です。 「半角空白2個」でデータを仕切って,「全角空白文字」で仕切ったデータをつなげる。 ということです。 結果的に「置換」になります。
お礼
なるほど! 全角スペースとは思いつきませんでした。 condenceWhiteは、使い勝手が微妙かと思ってましたが、これなら色々使えそうです!ありがとうございました。
お礼
>スペースを残す方法ではないのですが。 >ご提示の例から察するに、更新情報の表示などによく使われている段組みがご希望なのではないでしょうか。 まさしくその通りです!質問の書き方がずれてしまってましたね…(^-^; タブ幅をプログラム的に調整できるとは知りませんでした。 私の環境はFLASH MX2004ですが、テキストデータを書くのはFLASHやhtmlをあまり知らない人という前提なので、FLASH6の手法を使わせていただきます。ありがとうございました!m(__)m