以下のカンマ区切りの文字列をカンマで分解して表示する。
東京,神奈川,千葉,埼玉
<cfset a = "東京,神奈川,千葉,埼玉"> <cfloop index="idx" list="#a#"> <cfoutput>#idx#<br></cfoutput> </cfloop>
神奈川と千葉の間にカンマが3つあったとしても
表示は同じです。
<cfset a = "東京,神奈川,,,千葉,埼玉"> <cfloop index="idx" list="#a#"> <cfoutput>#idx#<br></cfoutput> </cfloop>
なんと!
ColdFusionでは空データが無視されています。
ListLen関数でも項目数は4となります。
1995年の初期の頃は必要なかったのかもしれませんが、
基幹業務などのCSVデータを取り込む場合は
注意が必要です。
個人的には
「,,」の文字列があった場合は「,NULL,」に変換、
1バイト目が「,」の場合「NULL,」に変換、
最後の文字が「,」の場合「,NULL」に変換、
その後リスト処理をやって、要素がNULLの場合は無視、
としました。
今考えると「NULL」という文字自体がデータであるかもしれないので
タブコードなどありえないものに変換したほうがいいでしょう。
タブコード自体も区切りとして使う場合があるので、
「|」とか。
または外部の関数を使うとか。
外部関数なら、こちらを利用しました。
http://www.bennadel.com/blog/991-CSVToArray-ColdFusion-UDF-For-Parsing-CSV-Data-Files.htm
ColdFusion10からは、関数のパラメータが増えて考慮されているようです。