title: Phi::Strings
author: YOSHIDA Kazuhiro
mailto: moriq@moriq.com

1. Phi::Strings

文字列リスト

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

1.1. 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 を取得するときに文字列リストの文字列にスペース，カンマ，または引用符がある場合には，文字列は二重引用符で囲まれ，二重引用符がある場合には二重引用符が連続して付けられます。たとえば，文字列リストに次の文字列があるとします。
--text
Stri,ng 1
Stri"ng 2
String 3
String4
--
  comma_text は次を返します。
--text
"Stri,ng 1","Stri""ng 2","String 3",String4
--
  comma_text を割り当てる場合，値は SDF 書式付きテキストとして解析されます。 SDF 形式の場合，文字列はスペースまたはカンマで区切られ，任意で二重引用符で囲まれます。文字列に二重引用符がある場合，元の文字列と文字列を囲む引用符を区別するために続けて引用符を付けます。二重引用符で囲まれていないスペースおよびカンマは区切り記号です。 2 つ並んだカンマは空の文字列を意味しますが，区切り記号の前後にあるスペースは無視されます。たとえば， comma_text を次のように設定するとします。
--text
"Stri,ng 1", "Stri""ng 2", String 3,String4
--
  リストには次の文字列が含まれます。
--text
Stri,ng 1
Stri"ng 2
String
3
String4
--

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

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

1.1. 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 を返します。

: 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 番目の文字列に関連付けられたオブジェクトを返します。

: 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)
  リスト内の文字列の位置を変更します。

  例えば，次のコードは文字列の位置をリストの先頭から最後に移動します。
--ruby
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
  リストの文字列を指定したファイルに保存します。
