Boost.tokeniser ライブラリでは、tokeniser テンプレートクラスに、 分割したい文字列と、分割基準を定めたオブジェクト(TokenizerFunction)を渡すと、 分割済みの文字列(トークン)としてアクセスすることができます。
Boost.tokeniser については、 http://www.boost.org/libs/tokenizer/ の documentation を参照してください。
escaped_list_separator class は、この TokenizerFunction の実装のひとつで、 いわゆる CSV(comma separated value) list のスパーセットになっています。 それは、コンマ(,)または他の文字(delimiting character)によって、フィールドに分割されます。 delimiting character が、クウォート("")で囲まれたフィールドの中にある場合は、 (delimiting character としてではなく)通常の文字として処理されます。 フィールドへのクウォーテンションマーク(")自身の埋め込みを許すために、C 言語の様に エスケープシーケンスが使われます。コンマ(,)、クウォーテンションマーク(")と エスケープ文字(\)は、他の文字に割り当てることが可能です。
しかし、エスケープ記号として、"\" (0x5C)が用いられるとき、処理すべき文字列に、 漢字(Shift-jis)があると、不具合が生じることがあります。 それは、Shift-jisでは、第2バイト目にこの "\" と同じコードがくる 文字(例えば、「ソ」、「申」、「十」等)があるからです。、 そうすると、その文字の次の文字(あるいは次の Shift-jis 漢字の第1バイト目)とのセット をエスケープシケースとして扱ってしまい、正しく処理できません。 そこで、この escaped_list_separator_sjis class では、 escaped_list_separator class コードの一部を改変して分割対象の文字列中の 漢字(Shift-jis)を正しく扱うコードを付け足しています。
escaped_list_separator class は、
※ Shift-jis については、 http://ja.wikipedia.org/wiki/Shift_JIS
等を参照。
※ Comma Separated Value(CSV) については、 http://ja.wikipedia.org/wiki/Comma-Separated_Values
等を参照。