Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Phi::Strings

Phi::Strings

文字列リスト

文字列リストは,文字列を要素とする配列のようなものです。文字列には任意のオブジェクトを関連付けることができます。 INI ファイルのような書式でハッシュのような使いかたもできます。

Delphiのオブジェクトが内部的に Strings の承継クラスを作成して保持しているときなどに Phi::Strings クラスのオブジェクトとしてそれを返すことがあります。(実際には Strings を承継した別のクラスです)。

require "phi"
form = Phi::Form.new
list_box = Phi::ListBox.new form
p list_box.items #=> #<Phi::Strings: >

しかし、Phi::Strings クラスは抽象クラスなので Phi::Strings.new でオブジェクトを作成することはできません。

require "phi"
strings = Phi::Strings.new
  #=> undefined method `new' for Phi::Strings:Class (NoMethodError)

Strings クラスのオブジェクトが必要な場合には Phi::StringList.new を使用します。

require "phi"
string_list = Phi::StringList.new
p string_list                    #=> #<Phi::StringList: >
p string_list.is_a? Phi::Strings #=> true

properties

self[n] : String

n 番目の文字列を取得します。

self[name] : String

形式が「名前 = 値」という文字列の場合に,指定した名前に関連付けられた文字列の値の部分を取得します。

self[n]=(s) : nil

n 番目の文字列を設定します。

self[name]=(value) : nil

形式が「名前 = 値」という文字列の場合に,指定した名前に関連付けられた文字列の値の部分を設定します。

count : Fixnum

リスト内の文字列数を表します。

text : String

text=(text) : String

リスト内のすべての文字列を復帰と改行 ("\r\n") で連結した文字列を取得または設定できます。

comma_text : String

comma_text=(text) : String

システムデータ形式 ( SDF ) の文字列リストです。

comma_text は Phi::Strings オブジェクト内のすべての文字列を単一のカンマ区切り文字列として取得および設定できます。

comma_text を取得するときに文字列リストの文字列にスペース,カンマ,または引用符がある場合には,文字列は二重引用符で囲まれ,二重引用符がある場合には二重引用符が連続して付けられます。たとえば,文字列リストに次の文字列があるとします。

Stri,ng 1
Stri"ng 2
String 3
String4

comma_text は次を返します。

"Stri,ng 1","Stri""ng 2","String 3",String4

comma_text を割り当てる場合,値は SDF 書式付きテキストとして解析されます。 SDF 形式の場合,文字列はスペースまたはカンマで区切られ,任意で二重引用符で囲まれます。文字列に二重引用符がある場合,元の文字列と文字列を囲む引用符を区別するために続けて引用符を付けます。二重引用符で囲まれていないスペースおよびカンマは区切り記号です。 2 つ並んだカンマは空の文字列を意味しますが,区切り記号の前後にあるスペースは無視されます。たとえば, comma_text を次のように設定するとします。

"Stri,ng 1", "Stri""ng 2", String 3,String4

リストには次の文字列が含まれます。

Stri,ng 1
Stri"ng 2
String
3
String4

hash : Hash

形式が「名前 = 値」という文字列をハッシュにして返します。

文字列を識別する name は等号 (=) の左側に置かれ, name 識別子の現在の value は等号の右側に置かれます。等号の前後に空白は入れません。

methods

equals(other)

self==(other)

self===(other)

文字列リストと別の Strings オブジェクトの文字列リストを比較して,一致すれば true を返します。

equals を呼び出すと, 2 つの Strings オブジェクト内のリストを比較できます。 equals は文字列だけを比較し,関連付けられたオブジェクトは比較しません。

両方の Phi::Strings オブジェクトに同じ数の文字列があり,各文字列リストの文字列が等しい場合には true を返します。

文字列または文字列リスト内の文字列の順序が異なる場合には false を返します。

add(s[, obj]) : Fixnum

文字列リストに文字列 s を追加します。

obj を指定した場合は,文字列リストに文字列を追加して,その文字列にオブジェクトを関連付けます。

add は文字列の index を返します。

color_list.rb にオブジェクトを伴う add のサンプルがある。

def i.add_colors(colors)
  colors.each do |c|
    items.add Phi.color_to_string(c), c # ←ここ
  end
  p items
end

add したオブジェクトは object_at などで参照する。

add_strings(other) : nil

文字列リストに文字列をまとめて追加します。

other : Phi::Strings

insert(n, s[, obj]) : nil

n 番目に文字列 s を挿入します。

obj を指定した場合は, n 番目に文字列を挿入して,それをオブジェクトと関連付けます。

delete(n) : nil

n 番目の文字列を文字列リストから削除します。

clear

リストを空にします。

object_at(n) : Object

n 番目の文字列に関連付けられたオブジェクトを返します。

color_list.rb に add でセットしたオブジェクトを参照するサンプルがある。

def i.on_draw_item(index, rect, state)
  canvas.fill_rect(rect)
  canvas.font.color = items.object_at(index) # ← ここ
  canvas.text_out(rect.left, rect.top, items[index])
end

index_of(s) : Fixnum

リスト内の文字列の位置を返します。

文字列リストにその文字列がない場合には -1 を返します。

index_of_name(name) : Fixnum

「名前 = 値」という形式の文字列について,その名前部分の index を返します。指定した名前が文字列リストにない場合には -1 を返します。

注意
名前の部分が name パラメータと一致する文字列が複数ある場合には index_of_name は最初の文字列の位置を返します。

index_of_object(obj) : Fixnum

文字列リスト内で指定したオブジェクトと関連付けられた最初の文字列のインデックスを返します。

オブジェクトが文字列に関連付けられていないときには -1 を返します。

exchange(n1, n2)

文字列リストの文字列の位置を入れ替えます。

move(n1, n2)

リスト内の文字列の位置を変更します。

例えば,次のコードは文字列の位置をリストの先頭から最後に移動します。

my_strings.move(0, my_strings.count-1)

load(file_name or stream) : self

指定したファイルのテキスト行をリストに取得します。

注意
load は add を使ってファイルから読み出した文字列を追加します。

save(file_name or stream) : file_name or stream

リストの文字列を指定したファイルに保存します。


ご意見・ご質問(comment plugin is disabled).


Last modified:2004/11/21 02:59:08
Keyword(s):
References:[Phi-Classes] [Phi-Constants] [Phi::IniFile] [Phi::ListBox] [Phi::ListItem] [Phi::Memo] [Phi::RadioGroup] [Phi::StringList] [tut-tut_edit] [tut-tut_memo]