2012年9月11日火曜日

Joinのオーバーロード

Joinのオーバーロードを試してみた。
但し、
class function Join(const Separator: string; const Values: IEnumerable): string; overload; static;
以外です。
詳細はプログラム中のコメントに記述しました。
以下、プログラム



  1. program Project3;  
  2.   
  3. {$APPTYPE CONSOLE}  
  4.   
  5. {$R *.res}  
  6.   
  7. uses  
  8.   System.SysUtils, System.Variants;  
  9.   
  10.   
  11. var  
  12.   s : string;  
  13.   a,b : single;  
  14.   s1,S2: string;  
  15.   elm : TArray<string>;  
  16.   //sh : TStringHelper;  
  17. begin  
  18.   try  
  19.     { TODO -oUser -cConsole メイン : ここにコードを記述してください }  
  20.    //sh : TStringHelper  
  21.   
  22.    //オーバーロードの1つ目  
  23.    //オープン配列を使用した形です。  
  24.    writeln('overload1:オープン配列');  
  25.    s := s.Join(',',['ミリー','ハイネ']);  
  26.    write('OK:');  
  27.    writeln(s);  
  28.    writeln;  
  29.   
  30.    s1 := '2.17'; s2 := '9.19';  
  31.    s := s.Join(',',[s1,s2]);  
  32.    write('OK:');  
  33.    writeln(s);  
  34.    writeln;  
  35.   
  36.    //文字列以外の型だとうまく出力できないようです。  
  37.    //空文字が出力されます。  
  38.    a := 2.17; b := 9.19;  
  39.    s := s.Join(',',[a,b]);  
  40.    write('NG');  
  41.    writeln(s);  
  42.    writeln;  
  43.   
  44.   
  45.    //オーバーロードの2つ目  
  46.    //文字列配列の結合開始位置(0基数)と数を指定  
  47.    //この例では、ニーナ,ベルト・サタンと表示します。  
  48.    //文字列配列作成の為にとりあえず分割  
  49.    s := 'ドッペ,パックン,ニーナ,ベルト・サタン,キノッピー';  
  50.    elm := s.Split([',']);  
  51.    writeln('overload2:開始位置と数を指定');  
  52.    writeln('元の文字列配列');  
  53.    for s1 in elm do  
  54.    begin  
  55.      writeln(s1);  
  56.    end;  
  57.    writeln('0基数で2番目の文字列から2個の文字列を結合');  
  58.    s := s.Join(',',elm,2,2);  
  59.    writeln(s);  
  60.    writeln;  
  61.   
  62.    readln;  
  63.   
  64.   
  65.   
  66.   except  
  67.     on E: Exception do  
  68.       Writeln(E.ClassName, ': ', E.Message);  
  69.   end;  
  70. end.  
  71.   
  72. </string>  

実行結果は

です。

2012年9月10日月曜日

Splitのオーバーロード

Delphi XE3のオーバーロードを試してみた。
各オーバーロードの内容はプログラム中のコメントに
記載しました。

  1. program Project2;  
  2.   
  3. {$APPTYPE CONSOLE}  
  4.   
  5. {$R *.res}  
  6.   
  7. uses  
  8.   System.SysUtils;  
  9.   
  10. var  
  11.   s,s1 : string;  
  12.   elm : TArray<string>;  
  13.   elm2 : TArray<string>;  
  14.   //sh : TStringHelper;  
  15. begin  
  16.   try  
  17.     { TODO -oUser -cConsole メイン : ここにコードを記述してください }  
  18.    //sh : TStringHelper  
  19.    s := 'ドッペ,パックン,ニーナ,,ベルト・サタン,,キノッピー';  
  20.    //Writeln(s);  
  21.   
  22.    //カンマで分割  
  23.    //オーバーロードの1つ目、第二引数に正の整数を入れると  
  24.    //先頭から指定した個数だけ分割します。  
  25.    //分割できる数以上の数を指定すると無視します。  
  26.    //この場合は、ドッペとパックンだけを切り出します。  
  27.    elm := s.Split([','],2);  
  28.    write('overload1:');writeln(s);  
  29.    //分割した要素を表示  
  30.    for s1 in elm do  
  31.    begin  
  32.      writeln(s1);  
  33.    end;  
  34.   
  35.    writeln;  
  36.   
  37.    //結合(念のため文字列を初期化)  
  38.    //s := '';  
  39.    //Writeln(s);  
  40.   
  41.    //s := s.Join(',',elm);  
  42.    //Writeln(s);  
  43.   
  44.   
  45.    //オーバーロードの2つ目、第二引数に  
  46.    //TStringSplitOptions.ExcludeEmptyを指定すると  
  47.    //空文字を無視して切り出します。  
  48.    //TStringSplitOptionsを指定しない場合、あるいは  
  49.    //TStringSplitOptions.Noneを指定した場合は  
  50.    //空文字も1つとして切り出します。  
  51.    elm2 := s.Split([','],TStringSplitOptions.None);  
  52.    write('overload2-1:');writeln(s);  
  53.    for s1 in elm2 do  
  54.    begin  
  55.      writeln(s1);  
  56.    end;  
  57.    writeln;  
  58.   
  59.    elm2 := s.Split([','],TStringSplitOptions.ExcludeEmpty);  
  60.    write('overload2-2:');writeln(s);  
  61.    for s1 in elm2 do  
  62.    begin  
  63.      writeln(s1);  
  64.    end;  
  65.    writeln;  
  66.   
  67.   
  68.    //オーバーロードの3つ目、第二引数に正の整数を入れると  
  69.    //先頭から指定した個数だけ分割します。  
  70.    //このときTStringSplitOptions.ExcludeEmptyを指定すると  
  71.    //空文字を無視して切り出します。  
  72.    //TStringSplitOptionsを指定しない場合、あるいは  
  73.    //TStringSplitOptions.Noneを指定した場合は  
  74.    //空文字も1つとして切り出します。  
  75.    //この場合はベルト・サタンも切り出します。  
  76.    elm2 := s.Split([','],4,TStringSplitOptions.ExcludeEmpty);  
  77.    write('overload3:');writeln(s);  
  78.    for s1 in elm2 do  
  79.    begin  
  80.      writeln(s1);  
  81.    end;  
  82.    writeln;  
  83.   
  84.    //オーバーロードの4つ目、セパレータに文字列を指定する  
  85.    //こともできます。  
  86.    //この場合は、ドッペ,パッと,ニーナ,,ベルト・サタン,,キノッピー  
  87.    //に分割されます。  
  88.    //(セパレータにCRLFを指定することが可能です。)  
  89.    elm2 := s.Split(['クン'],TStringSplitOptions.None);  
  90.    write('overload4:');writeln(s);  
  91.    for s1 in elm2 do  
  92.    begin  
  93.      writeln(s1);  
  94.    end;  
  95.    writeln;  
  96.   
  97.   
  98.    //オーバーロードの5つ目、セパレータに文字列を指定したうえで  
  99.    //分割した結果を取り出すことも可能です。  
  100.    //この場合は、ドッペ,パッだけを取り出します。  
  101.    //に分割されます。  
  102.    elm2 := s.Split(['クン'],1,TStringSplitOptions.None);  
  103.    write('overload5:');writeln(s);  
  104.    for s1 in elm2 do  
  105.    begin  
  106.      writeln(s1);  
  107.    end;  
  108.    writeln;  
  109.   
  110.   
  111.    readln;  
  112.   
  113.   
  114.   except  
  115.     on E: Exception do  
  116.       Writeln(E.ClassName, ': ', E.Message);  
  117.   end;  
  118. end.  
  119. </string></string>  

で実際に実行した結果のビットマップが


です。

追伸:サンプルに使用した文字列がマイナーすぎたようなので、ちょっとだけわかりやすい
ものにしました。

2012年9月5日水曜日

SplitとJoin

Delphi XE3で新たに導入されたStringHelperを使ってみた。 使ったのはJoinとSplit。
それぞれ一番簡単な呼び出し形式です。
以下、プログラム



  1. unit Unit1;  
  2. program Project1;  
  3.   
  4. {$APPTYPE CONSOLE}  
  5.   
  6. {$R *.res}  
  7.   
  8. uses  
  9.   System.SysUtils;  
  10.   
  11. var  
  12.   s : string;  
  13.   elm : TArray<string>;  
  14.   //sh : TStringHelper;  
  15. begin  
  16.   try  
  17.     { TODO -oUser -cConsole メイン : ここにコードを記述してください }  
  18.    //sh : TStringHelper  
  19.    s := 'キャサリン,さをり,ツネアキ,ハゲミーナ,ヒデオ';  
  20.    Writeln(s);  
  21.   
  22.    //カンマで分割  
  23.    elm := s.Split([',']);  
  24.   
  25.    //分割した要素を表示  
  26.    for s in elm do  
  27.    begin  
  28.      writeln(s);  
  29.    end;  
  30.   
  31.    //結合(念のため文字列を初期化)  
  32.    s := '';  
  33.    s := s.Join(',',elm);  
  34.   
  35.    Writeln(s);  
  36.    readln;  
  37.   
  38.   
  39.   
  40.   except  
  41.     on E: Exception do  
  42.       Writeln(E.ClassName, ': ', E.Message);  
  43.   end;  
  44. end.  
  45. </string>  

で実際に実行した結果が、

です。