で.csvファイルを分割する時に大活躍するコマンドです。
ただ、特定の条件下で想定しない挙動を示します。
ちなみに.csvファイルとは、カンマで区切られた値の集合。
string $csv="A,B,C,D,E,F,";
を分割する場合、
string $array[]=stringToStringArray( $csv,"," );
と書き、戻ってきた$arrayは、こんな感じになります。
0: A
1: B
2: C
3: D
4: E
5: F
しかし、渡す文字列の「C」を削って、
string $csv="A,B,,D,E,F,";
こういう風にカンマが連続している場合の$arrayは
0: A
1: B
2: D
3: E
4: F
と、「C」に当たる$array[2]がブランクではなく「D」以降の文字が繰上げで代入されています。
string $csv="A,B, ,D,E,F,";
とスペースを入れてあったりする場合は、
0: A
1: B
2:
3: D
4: E
5: F
と、$array[2]にはスペースが入ります。
stringToStringArrayと似たようなコマンド、tokenizeでも同じ事が起きます。
これがバグなのか仕様なのかは不明。
回避するためには自分でナントカするしかないようです。
で、ナントカしたスクリプト。
引数の文字数を2回ループさせているので、処理速度的に1回で済ますようにした方が良いのかなぁ・・・。
1回にするとifを挟むので、それがネックになりそうだし。
難しい。
0 件のコメント:
コメントを投稿