初期化(インスタンス化)

Posted by muchag | ActionScript 3.0 | 2010-08-02 (月) 22:40:30

リファレンスで 初期化 と言っているのでそのままタイトルにしたが
要は インスタンス化

XML リテラルを割り当てる手法
ActionScript 3

  1. var myXML:XML =  
  2.     <item label="野球">
  3.         <item label="プロ">
  4.             <item label="パ・リーグ">
  5.                 <item label="南海ホークス"/>
  6.                 <item label="西鉄ライオンズ"/>
  7.             </item>
  8.         </item>
  9.         <item label="高校野球">
  10.             <item label="明訓"/>
  11.             <item label="弁慶"/>
  12.         </item>
  13.     </item>;

 

XML 文字列から生成する手法
ActionScript 3

  1. var myString:String =  
  2.     <item label="野球">
  3.         <item label="プロ">
  4.             <item label="パ・リーグ">
  5.                 <item label="南海ホークス"/>
  6.                 <item label="西鉄ライオンズ"/>
  7.             </item>
  8.         </item>
  9.         <item label="高校野球">
  10.             <item label="明訓"/>
  11.             <item label="弁慶"/>
  12.         </item>
  13.     </item>;
  14. var myXML:XML = new XML(myString);

 

変数から生成する手法

こんなこともできるんだねぇ。
ちょっと驚いた。 😆

ActionScript 3

  1. var tagname:String = "item";  
  2. var attributename:String = "id";  
  3. var attributevalue:String = "5";  
  4. var content:String = "Chicken";  
  5. var x:XML = <{tagname} {attributename}={attributevalue}>{content}</{tagname}>;  
  6. trace(x.toXMLString())
  7.  
  8. // Output: <item id="5">Chicken</item>

 

外部ファイルを読み込む手法

 
Flash 用 ActionScript 3.0 のプログラミング:XML 変数の初期化

ActionScript 3.0 | 2010-08-02 (月) 22:40:30 |

Flash Builder -> Tree -> itemRenderer の変更

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-08-02 (月) 22:16:53

Tree コンポーネントの各ノードの外観や昨日を変更するには
Tree コンポーネントの itemRenderer プロパティを用いる。

itemRenderer

itemRenderer は、Tree コンポーネントの全体ではなく
ノード1つ分、つまり1行分を設定するようなシステムである。

この、ノード1つ分を決めてやることで、各ノードにその設定が反映され
独自の Tree コンポーネントが出来上がる。
 

itemRenderer の作成
MXML で作成する手法


MXML エディタに上記のように打ち込むと、itemRenderer の作成サポートが表示される。
 
これを選択すると左のようなダイアログが表示される。

パッケージ は、参照からフォルダを辿ってもよいし、
自ら入力すればフォルダが存在しない場合はフォルダを自動生成してくれる。

終了 をクリックすれば、以下のような MXML ファイルが自動生成される。

プロジェクトフォルダ/src/hoge/moge/testRenderer.mxml

[mxml]


















[/mxml]

これを見るとデフォルトの itemRenderer が分かる。

ステート

normal、hovered(マウスオーバー時)、selected(クリック時) の3つのステートがある。
 

itemEditor

itemRenderer に搭載される各コンポーネントのことを itemEditor という。

Tree コンポーネントの itemEditor は5つ(?)。
getChildAt(0):インデント用の Rect
getChildAt(1):disclosureIcon 用の Group
getChildAt(2):disclosureIcon 用の BitmapImage
getChildAt(3):icon 用の BitmapImage
getChildAt(4):Label
上記5つのうち、3 の icon 用の BitmapImage 以外は、確かめていないので怪しい。

いずれにせよ、ここに CheckBox なり RadioButton なり配置すれば、表示することができる。

データバインディング
また、バインドされているデータのところを見ると {treeListData.indent} のようになっている。

ここから見て、indent, icon, label は予め設定してあるようでこのまま使えるようだ。
Tree コンポーネントの iconField プロパティや lableField プロパティに XML データの属性を設定した結果、そのまま使えた。

しかしそれ以外の属性データを使いたい場合は
{treeListData.@hoge} ではなく {data.@hoge} としてやることで読み込んでくれた。

課題
ただ、残念ながら icon は上手くいかなかった。
固定アイコンは問題なかったのだが、@icon 属性に表示したい icon へのパスをセットし
source=”{treeListData.disclosureIcon}”

source=”@Embed source='{treeListData.disclosureIcon}'”
こんな風にしてみても反映されなかった。
 

AS で作成する手法

アシアルブログ:【Flex3】「Flex3の、こんなときどうするの??」
ここの6番。 6. ツリーに文字列以外のものを表示したい
これを参考にさせていただいた。
[mxml]



).node; ]]>

[/mxml]

TreeItemRenderer クラスを継承したクラスを新たに作成する。

Actionscript 3.0 on Flex 4

  1. package components
  2. {
  3.     import mx.binding.utils.BindingUtils;
  4.     import mx.controls.CheckBox;
  5.     import mx.controls.treeClasses.TreeItemRenderer;
  6.     import mx.controls.treeClasses.TreeListData;
  7.  
  8.     public class Hoge extends TreeItemRenderer
  9.     {
  10.         [Bindable]
  11.         public var checkBox:CheckBox;
  12.  
  13.         public function Hoge()
  14.         {
  15.             super();
  16.         }
  17.  
  18.         override public function set data(value:Object):void {
  19.             super.data = value;
  20.         }
  21.  
  22.         override protected function createChildren():void{
  23.             super.createChildren();
  24.  
  25.             checkBox = new CheckBox();
  26.             checkBox.setStyle("verticalAlign","middle");
  27.             BindingUtils.bindSetter(setSelected, checkBox, 'selected');
  28.             this.addChild(checkBox);
  29.         }
  30.  
  31.         override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {    
  32.             var treeListData:TreeListData = TreeListData(super.listData);
  33.  
  34.             super.updateDisplayList(unscaledWidth,unscaledHeight);
  35.  
  36.             if(super.data)
  37.             {
  38.                 if (data.@selected.toString() == 'true')
  39.                 {
  40.                     checkBox.selected = true;
  41.                 }
  42.                 else
  43.                 {
  44.                     checkBox.selected = false;
  45.                 }
  46.  
  47.                 checkBox.x = super.label.x;
  48.                 checkBox.y = ( unscaledHeight - checkBox.height ) /2;
  49.                 label.x = checkBox.x + checkBox.width + 20;
  50.             }
  51.         }
  52.  
  53.         private function setSelected(selected:Boolean):void
  54.         {
  55.             if (data)
  56.             {
  57.                 data.@selected = selected.toString();
  58.             }
  59.         }
  60.     }
  61. }

別途、こんな例も見つけた。
FXUG:Re: Treeのアイコンを動的に変更したい

Actionscript 3.0 on Flex 4

  1. import flash.display.DisplayObject;
  2.    
  3.     import mx.collections.*;
  4.     import mx.controls.Image;
  5.     import mx.controls.treeClasses.*;
  6.  
  7.     public class TreeItemRendererEx extends TreeItemRenderer {
  8.         private var img:Image = new Image();
  9.  
  10.         public function TreeItemRendererEx() {
  11.             super();
  12.             this.addChild(this.img as DisplayObject);
  13.         }
  14.  
  15.         override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
  16.             super.updateDisplayList(unscaledWidth, unscaledHeight);
  17.  
  18.             if(data!=null) {
  19.                 this.label.x += 5;
  20.                 this.img.x = this.getChildAt(3).x;
  21.                 this.img.y = this.getChildAt(3).y - 5;
  22.                 this.img.width = 24;
  23.                 this.img.height = 24;
  24.  
  25.                 this.img.source = data.iconPath;
  26.  
  27.                 this.getChildAt(3).visible = false;
  28.             }
  29.         }
  30.     }

この方法だと、上記 MXML による itemRenderer の実装時に問題となった
全ノード異なるアイコンを表示する という作業も上手くいった。

しかしこちらの方法だと Label を二段にする という作業は上手くできなかった。

ActionScript 3.0,Flash Builder 4 | 2010-08-02 (月) 22:16:53 |

Flash Builder -> Tree -> ノードの開閉

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 21:59:23

Tree コンポーネントの各ノードの開閉を制御したい。

expandItem() メソッドを用いることで実現できる。

開く場合は、第2引数を true に、閉じる場合は、第2引数を false に。

 

Actionscript 3.0 on Flex 4

  1. public function expandItem(
  2.     item:Object,
  3.     open:Boolean,
  4.     animate:Boolean = false,
  5.     dispatchEvent:Boolean = false,
  6.     cause:Event = null
  7. ):void

Adobe® Flex® 4.1 リファレンスガイド:Tree expandItem() メソッド
 

item

今のところ、XMLListCollection の方法しかわからない。

しかも、場所を自由に選ぶ方法がわからない。

詳細は、以下の 特定のノードの開閉 を参照。
 

特定のノードの開閉

今のところ、起動時に固定フォルダを開く方法しか試していない。
 

XML オブジェクトを辿る手法
Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(event.result);
  2. myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
  3.  
  4. myTree.validateNow();
  5. treeFavorit.expandItem(myXML.children()[0], true, true);

これはルートを表示しない方式の Tree で、1番目のフォルダをデフォルトで開いた状態にしている。

4行目に関しては

dataProvider を設定し、その直後に expandItem() を呼び出した場合は、不適切な動作が起こる可能性があります。
コンポーネントが検証されるまで待つか、validateNow() を呼び出します。

リファレンスのこの指示に従ったまでである。
 

XML オブジェクトをインデックスで拾う手法

Tree コンポーネントには、indexToItemRenderer() メソッドというものがあり
インデックスから当該アイテムレンダラを取得できる。

ただこのインデックスは曲者で、現在の状態で上から何番目 というものらしく
ノードの開閉状態によって コロコロ変化する ようだ。

さりながら、メインフォルダであればルートを表示していれば 1 。
ルートを表示してなければ 0 になる。

これを利用して以下のようにすることで、メインフォルダに関してだけは成功した。

Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(event.result);
  2. myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
  3.  
  4. myTree.validateNow();
  5. var renderer:IListItemRenderer = myTree.indexToItemRenderer(0);
  6. if (renderer)
  7. {
  8.     var myXML:XML = renderer.data as XML;
  9.     myTree.expandItem(myXML, true);
  10. }
ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 21:59:23 |

Flash Builder -> XML 系の比較

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 18:34:04

Flash Builder 4 -> コレクションオブジェクト
ここでも触れたが、FB4 には XML 系オブジェクトとして3種類存在する。
XML オブジェクト、XMLList オブジェクト、XMLListCollection オブジェクト

それぞれの意義自体もまだよく分かってないが
それに纏わるプロパティ、メソッドとなると尚更だ。

そこで、気が付く毎に何となく列挙していくことにした。

length 系
XML
length プロパティ

length プロパティは存在する。

Actionscript 3.0 on Flex 4

  1. XML.length

これは、当然の如く必ず 1 が戻り値。
なぜって? XML オブジェクトとは、ルートが1つのものだから。
 

length() メソッド

子供の数を知りたければ

Actionscript 3.0 on Flex 4

  1. XML.children().length()

このように children()length() メソッド を用いる。

特定の子供の数を知りたければ

Actionscript 3.0 on Flex 4

  1. XML.child("hoge").length()

このように child() メソッドlength() メソッド を用いる。

また、child() メソッドにはワイルドカードが使えるようで

Actionscript 3.0 on Flex 4

  1. XML.child("*").length()

これで全ての子の数が拾えるようだ。
 

XMLList
length プロパティ

XMLList オブジェクトには、length プロパティは 存在しない ようだ。
 

length() メソッド
Actionscript 3.0 on Flex 4

  1. XMLList.length()

これは、XMLList のプロパティの数が戻り値。
 

XMLListCollection
length プロパティ

[読み取り専用] このビュー内のアイテムの数です。

意味不明・・・。
 

length() メソッド

XMLListCollection オブジェクトには、length() メソッドは 存在しない ようだ。
 
 
実際に動かしてみないとよくわからないね。
暇を見てチャレンジしてみることにしよう。
 
Adobe® Flex® 4.1 リファレンスガイド
XMLXMLListXMLListCollection

Flash 用 ActionScript 3.0 のプログラミング:XML の操作

ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 18:34:04 |

Flash Builder -> Tree -> Drag & Drop 情報取得

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 2:19:59

D&D によって変更されたフォルダ構成を DB へ反映させるためには
ドラッグしたアイテムとドロップ先アイテムの情報を取得しなければならない。

幸い、よい参考サイトが見つかった。
FXUG:ドラッグ&ドロップ(treeからpanel)
Re: Treeのアイテム移動の制御

元データの取得

まずはドラッグしているアイテム(ノード)の情報について。

これはとても単純。
しかし、上記参考サイトにも載っているが、以下のようにするとエラーが出る。

Actionscript 3.0 on Flex 4

  1. var dragInitiatorData:Object = event.dragSource.dataForFormat('treeItems');
  2. Alert.show(dragInitiatorData.@label);
ReferenceError: Error #1081: Array にプロパティ @label が見つからず、デフォルト値もありません。

これは、変数 data が単純な Object 型 だと思っていたら Array 型 だったという罠。

そういうわけなので、下記のようにするのが正解。

Actionscript 3.0 on Flex 4

  1. var dragInitiatorData:Object = event.dragSource.dataForFormat('treeItems');
  2. Alert.show(dragInitiatorData[0].@label);

また、これも上記サイトに書いてあるが、複数行選択を許可した場合はまだ工夫が必要なようだ。
 

先データの取得

これも 前回 同様、上記参考サイトのコードをそのままいただいた。

Actionscript 3.0 on Flex 4

  1. var tree:Tree = event.currentTarget as Tree;
  2. var n:int = tree.calculateDropIndex(event);
  3. var dropTargetRenderer:IListItemRenderer = tree.indexToItemRenderer(n);
  4. if (dropTargetRenderer)
  5. {
  6.     // ドロップ先のXML情報
  7.     var targetXML:XML = dropTargetRenderer.data as XML;
  8.     // ドロップ先の親のXML情報
  9.     var parentXML:XML = targetXML.parent();
  10.     // ドロップ先の親の子供情報
  11.     var childrenXMLList:XMLList = parentXML.children();
  12. }


 

calculateDropIndex の曖昧さ

ところが、この方法だと、私がやりたいことの場合は曖昧であることがわかった。


このような Tree コンポーネントがあるとする。

Folder 3 を Folder 12 と Folder 2 の間に入れる場合は、以下の2パターン存在する。
傍線の長さに注目。

そして、それぞれの結果はこうなる。

この場合、上記の手法、即ち calculateDropIndex を利用する手法だと、
共に 3 を得ることになる。

calculateDropIndex とは、現時点で開いている、
つまり 見えている状態で上から何番目 という判断をするらしく
全体の中での 正確な情報ではない 上に、パターン1とパターン2の 区別がつかない

mx_internal::_dropData

そこで他を当たっていたら以下を見つけた。
FXUG:DataGridからTreeへのドラッグアンドドロップ時のドロップ先情報について

ここに載っている mx_internal::_dropData というのを用いると

Actionscript 3.0 on Flex 4

  1. var dropTargetData:Object = tree.mx_internal::_dropData;
  2. // ドロップ先の親のXML情報
  3. var parentXML:XML = dropTargetData.parent as XML;

パターン1では root を親とし
パターン2では Folder 2 を親としてくれた。

ホッとしながらも、mx_internal についてグーグル先生に聞いてみると
DROP.FACTORY:[@Flex]プロパティやメソッドの可視性

「mx_internal」は過去の遺物らしいです。
使用には十分注意しましょう、とゆーことか。

ということらしい。

確かに Adobe® Flex® 4.1 リファレンスガイド の索引には見当たらない・・・。

ん~、それでは正しい情報はどこからもらえるんだろう・・・。

また、こちらのサイトの他、あちこちのサイトに書いてある

Actionscript 3.0 on Flex 4

  1. import mx.core.mx_internal;
  2. use namespace mx_internal;

こちらの2行は、私の環境では書かなくても利用可能であった。

ActionScript 3.0,Flash Builder 4 | 2010-07-31 (土) 2:19:59 |

Flash Builder -> Tree -> Drag & Drop 個々に設定

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-29 (木) 1:25:50

Tree コンポーネントを触っていて
Windows エクスプローラ ライクに D&D をしたくなる。

Tree コンポーネントの場合、D&D だけなら簡単だ。

D&D の実装

[mxml][/mxml]
上記の如く、dragEnableddropEnabled プロパティを true に設定すればいい。

dragMoveEnabled プロパティに関しては、Tree コンポーネントの場合はデフォルトで true なので、
設定の必要はない。
 

個々に設定

ところが、1つの Tree コンポーネントの中で、
ドラッグ禁止やらドロップ禁止を個々に設けたい場合がある。

その際は、Tree コンポーネントのイベントを利用する。

Flash Builder -> Tree with Spring Loaded Folders
で、よいサンプルを見つけたものの、Flex 2 用で上手く動かなかったので
これを見つつ、以下を大いに参考にして、カーソル変更も付加した結果がこれだ。
FXUG:Re: Treeのアイテム移動の制御
[mxml][/mxml]

上記のように、目的別にイベントを設定し、
そのイベント内容を関数にすることで、目的の処理をする。

Actionscript 3.0 on Flex 4

  1. import mx.controls.listClasses.IListItemRenderer;
  2. import mx.events.DragEvent;
  3.  
  4. import net.lifebird.ui.cursor.*;
  5. import net.lifebird.ui.cursor.plugins.*;
  6.  
  7. // D&D 処理が完全に終了した時点
  8. private function myTree_dragCompleteHandler(event:DragEvent):void
  9. {
  10.     Cursors.cursor(CursorType.DEFAULT);
  11. }
  12.  
  13. // ドロップした時点
  14. private function myTree_dragDropHandler(event:DragEvent):void
  15. {
  16.     Cursors.cursor(CursorType.DEFAULT);
  17.  
  18.     if (!isDropEnabled(event))
  19.         event.preventDefault();
  20. }
  21.  
  22. // Tree コンポーネントより外へマウスが出た時点
  23. private function myTree_dragExitHandler(event:DragEvent):void
  24. {
  25.     Cursors.cursor(CursorType.REJECT);
  26. }
  27.  
  28. // Tree コンポーネント内でドラッグされている間
  29. private function myTree_dragOverHandler(event:DragEvent):void
  30. {
  31.     if (!isDropEnabled(event)) {
  32.         var tree:Tree = event.currentTarget as Tree;
  33.         tree.hideDropFeedback(event);
  34.         event.preventDefault();
  35.         Cursors.cursor(CursorType.REJECT);
  36.     }
  37.     else {
  38.         Cursors.cursor(CursorType.DEFAULT);
  39.     }
  40. }
  41.  
  42. // ドラッグ開始時点
  43. private function myTree_dragStartHandler(event:DragEvent):void
  44. {
  45.     if (!isDragEnabled(event))
  46.         event.preventDefault();
  47.    
  48.     Cursors.cursor(CursorType.DEFAULT);
  49. }
  50.  
  51. // マウスカーソルが乗ったアイテムのドラッグ可否関数
  52. private function isDragEnabled(event:DragEvent):Boolean
  53. {
  54.     var tree:Tree = event.currentTarget as Tree;
  55.     var n:int = tree.calculateDropIndex(event);
  56.     var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
  57.     if (renderer)
  58.     {
  59.         var xml:XML = renderer.data as XML;
  60.         if (xml.@acceptDrag == "false")
  61.             return false;
  62.     }
  63.     return true;
  64. }
  65.  
  66. // マウスカーソルが乗ったアイテムのドロップ可否関数
  67. private function isDropEnabled(event:DragEvent):Boolean
  68. {
  69.     var tree:Tree = event.currentTarget as Tree;
  70.     var n:int = tree.calculateDropIndex(event);
  71.     var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
  72.     if (renderer)
  73.     {
  74.         var xml:XML = renderer.data as XML;
  75.         if (xml.@acceptDrop == "false")
  76.             return false;
  77.     }
  78.     return true;
  79. }

This movie requires Flash Player 9.0.0

カーソルの変更については以下を参照。
Flash Builder 4 -> net.lifebird.ui.cursor

ActionScript 3.0,Flash Builder 4 | 2010-07-29 (木) 1:25:50 |

配列操作

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 22:23:23

ActionScript 3.0 言語およびコンポーネントリファレンス:Array

追加

push() メソッド を用いる。

ActionScript 3

  1. var myArray:Array = new Array("Jun", "Feb", "Mar");
  2. myArray.pushu("Apr", "May");

ActionScript 3.0 言語およびコンポーネントリファレンス:push() メソッド
 

検索

indexOf() メソッドを用いる。

ActionScript 3

  1. var myArray:Array = new Array("Jun", "Feb", "Mar");
  2. var myIndex:int = myArray.indexOf("Mar");
  3. trace(myIndex);
  4.  
  5. // 2

ActionScript 3.0 言語およびコンポーネントリファレンス:indexOf() メソッド

ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 22:23:23 |

ActionScript 3 Index

Posted by muchag | ActionScript 3.0 | 2010-07-22 (木) 18:23:06

丸っきりの書きかけ項目は Not found になる。

基本
  1. データ型
関数・メソッド
  1. ***
  2. Tips
    1. 関数パラメータ
    2. 配列操作
    3. 文字列操作
      1. 文字列の検索・置換
      2. 正規表現
クラス・オブジェクト
  1. ***
    1. XML(XMLList)
      1. E4X
      2. 初期化(インスタンス化)
      3. XML の操作
  2. Tips
その他
  1. Tips
    1. ActionScript と PHP の連携
参考

ActionScript 3.0 言語およびコンポーネントリファレンス

参考サイト

その他各参考サイトについては、各エントリーにて。

ActionScript 3.0 | 2010-07-22 (木) 18:23:06 |

文字列操作

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 18:09:23

結合

+ 演算子を用いる。

ActionScript 3

  1. var myString1:String = "アカサ";
  2. var myString2:String = "カサカス";
  3. var myString:String = myString1 + myString2;
  4. trace(myString);
  5.  
  6. // アカサカサカス
  7.  
  8. var myInt:int = 3;
  9. myString = myString1 + myInt;
  10. trace(myString);
  11.  
  12. // アカサ3

文字列と数字を結合すると文字列 になる。

分割

split メソッドを用いる。

AS3 function split(delimiter:*, limit:Number = 0x7fffffff):Array

ランタイムバージョン: AIR 1.0 Flash Player 9

指定された delimiter パラメータがある各位置で String オブジェクトをサブストリングの配列に分割します。

ActionScript 3.0 言語およびコンポーネントリファレンス:split() メソッド

 

検索
indexOf

indexOf メソッドは、検索文字列が最初に現れるインデックスを返す。
大文字と小文字が区別される

ActionScript 3

  1. var str:String = "The moon, the stars, the sea, the land";
  2. trace(str.indexOf("the")); // output: 10

第2引数には、開始位置を。
 

lastIndexOf

lastIndexOf メソッドは、検索文字列が最後に現れるインデックスを返す。
第2引数には、開始位置を。
先頭に向かって検索する。

Flash 用 ActionScript 3.0 のプログラミング:一致するサブストリングの文字の位置の検索
 

抽出

先頭の文字0番目(0文字目) であることに注意。

charAt

charAt は、1文字 抽出。

AS3 function charAt(index:Number = 0):String

ランタイムバージョン: AIR 1.0 Flash Player 9

index パラメータで指定された位置にある文字を返します。 index に指定された値が 0 ~ string.length – 1 の範囲外にある場合は、空のストリングを返します。

このメソッドは String.charCodeAt() に似ていますが、16 ビット整数の文字コードではなく文字が返される点が異なります。

ActionScript 3.0 言語およびコンポーネントリファレンス:charAt() メソッド

ActionScript 3

  1. var str:String = "Hello! World.";
  2. trace( str.charAt(7) );
  3.  
  4. // W

 

substr

substr は、開始位置から長さ で抽出。

AS3 function substr(startIndex:Number = 0, len:Number = 0x7fffffff):String

ランタイムバージョン: AIR 1.0 Flash Player 9

startIndex で指定された位置から len で指定された長さの文字を含むサブストリングを返します。
元のストリングは変更されません。

ActionScript 3.0 言語およびコンポーネントリファレンス:substr() メソッド

ActionScript 3

  1. var str:String = "Hello! World.";
  2. trace( str.substr(3, 2) );
  3.  
  4. // lo

 

substring

substring は、開始位置終了位置 で抽出。

AS3 function substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String

ランタイムバージョン: AIR 1.0 Flash Player 9

startIndex で指定された位置から endIndex – 1 までにあるすべての文字を含むストリングを返します。
endIndex が指定されていない場合、String.length が使用されます。
startIndex の値が endIndex の値と等しい場合、空のストリングが返されます。
startIndex の値が endIndex の値より大きい場合、関数を実行する前にパラメータが自動的に入れ替わります。
元のストリングは変更されません。

ActionScript 3.0 言語およびコンポーネントリファレンス:substring() メソッド

ActionScript 3

  1. var str:String = "Hello! World.";
  2. trace( str.substring(3, 5) );
  3. trace( str.substring(3) );
  4.  
  5. // lo
  6. // lo! World.

第2引数 endIndex は入らない ことに注意。
つまり、endIndex – startIndex 文字抽出される。

endIndex を省略すれば、startIndex より後ろ全部が抽出される。
 

長さ

length プロパティを用いる。

ActionScript 3

  1. var str:String = "Hello! World.";
  2. trace(str.length);
  3.  
  4. // 13

0 文字目の H から 12 文字目の . までの 13 文字。

ActionScript 3.0 言語およびコンポーネントリファレンス:length プロパティ

ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 18:09:23 |

Flash Builder 4 -> StringUtil

Posted by muchag | ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 0:28:10

StringUtil クラスは文字列のユーティリティらしい。

使用の際はインスタンス化の必要がない代わりに、StringUtil と一体で用いる

Adobe® Flex® 4.1 リファレンスガイド:StringUtil

trim

trim メソッドは、文字列の前後のスペースを全て削除するもの。

Actionscript 3.0 on Flex 4

  1. import mx.utils.StringUtil;
  2.  
  3. myString = StringUtil.trim(myString);

しか~し! この trim メソッドは 全角スペースには無効

なので、一旦全てのスペースを半角に変換してから trim !

Actionscript 3.0 on Flex 4

  1. var pattern:RegExp = /\u3000/g;
  2. myString = myString.replace(pattern, " ");
  3. myString = StringUtil.trim(myString);

文字列の途中の全角スペースはそのまま残したい。
なんていう場合は・・・そのときがきたら考えようっと。 😎
 
<参考元>
PHP,MySQL,Flexな日々+イラストとか:Flex(ActionScript3.0)でのtrim

ActionScript 3.0,Flash Builder 4 | 2010-07-22 (木) 0:28:10 |
次ページへ »