関数索引
split() 関数は、文字列を、特定のパターンのデリミタで区切りたい時に使用します。パターンの指定には正規表現が使えます。
分解したい文字列を指定します。
パターン:文字列を分解する境界を指定するパターンを与えます。パターンは正規表現で与えます。記述可能な正規表現については Appendix の「正規表現」を参照してください。
この関数の戻り値は要素が文字列の配列です。
"東京 , 名古屋 , 大阪" という文字列から、カンマで区切られた地名を取り出して wr-for に与えて表示しています。
<body>
......
<wr-for list="split(\"東京 , 名古屋 , 大阪\", \"\s*,\s*\")" variable="x">
<h2>[%x%]</h2>
</wr-for>
.....
</body>
パターンには "\s*,\s*" が指定されています。(wr-for の list= 属性のダブルクオートの中に置かれているので、ダブルクオートの前にバックスラッシュが追加されています)このパターンは "," (カンマ)とその前後にある任意個の空白文字とマッチします。このパターンと一致する部分が文字列の分割点となります。
このケースでは "東京 , 名古屋 , 大阪" という文字列が与えられていますので、指定されたパターンに従って分割を行なうと、「東京」「名古屋」「大阪」という3つの単語が切り出されます。split() 関数の戻り値は、この3つの文字列を含む配列となりますので、それを list に指定して wr-for タグを使ってループを実行することができます。
データという要素に、カンマで区切った複数行のテーブルデータが入力されているとします。そのデータを使って簡単な表を描いてみます。「データ」の内容は、例えば
123456,xyz,7890
aaa,123,ccc
というような値です。この例は 2 行3列の表データです。
少々複雑ですが、下記のような展開を記述することで、簡単な表を描くことができます。colspan / rowspan など複雑なケースには対応していません。
<table border="1">
<wr-->データという要素に入力されている値を行末記号で複数行モードで split します。</wr-->
<wr-for list="split(データ, \"(?m)$\")" variable="line">
<wr-->行が空行でない場合にかぎり処理を行ないます</wr-->
<wr-if condition="length(replaceAll(line, \"^\s*(.*)\s*$\", \"$1\")) > 0">
<tr>
<wr-->行をカンマとその前後の空白文字で split します</wr-->
<wr-for list="split(replaceAll(line, \"^\s*(.*)\s*$\", \"$1\"), \"\s*,\s*\")" variable="col">
<wr-->数字列である場合には右詰めで3桁カンマ編集をしてセルを描きます</wr-->
<wr-if condition="isNumber(col)">
<wr-then>
<td style="width: 100px; text-align: right; padding-right: 4px;">%comma3(col)%</td>
</wr-then>
<wr-->数字列でない場合には、そのまま左詰めでセルを描きます</wr-->
<wr-else>
<td style="text-align: left; width: 100px; padding-left: 4px">%col%</td>
</wr-else>
</wr-if>
</wr-for>
</tr>
</wr-if>
</wr-for>
</table>
展開結果は下記のようになるでしょう。
<table border="1">
<tr>
<td style="width: 100px; text-align: right; padding-right: 4px;">123,456</td>
<td style="text-align: left; width: 100px; padding-left: 4px">xyz</td>
<td style="width: 100px; text-align: right; padding-right: 4px;">7,890</td>
</tr>
<tr>
<td style="text-align: left; width: 100px; padding-left: 4px">aaa</td>
<td style="width: 100px; text-align: right; padding-right: 4px;">123</td>
<td style="text-align: left; width: 100px; padding-left: 4px">ccc</td>
</tr>
</table>