2017年7月31日月曜日

stringToStringArrayコマンドで注意すること

stringToStringArray、文字列を指定した文字で分割するコマンド 。
で.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 件のコメント:

コメントを投稿