22 const std::string separator_;
23 const std::string escape_seq_;
24 const std::string special_chars_;
27 CsvStream(
const std::string filename,
const std::string separator =
",")
30 separator_(separator),
32 special_chars_(
"\"") {
33 fs_.exceptions(std::ios::failbit | std::ios::badbit);
34 fs_.open(filename.c_str());
42 void flush() { fs_.flush(); }
56 CsvStream& operator<<(
const char* val) {
return write(escape(val)); }
58 CsvStream& operator<<(
const std::string& val) {
return write(escape(val)); }
77 std::string escape(
const std::string& val) {
78 std::ostringstream result;
80 std::string::size_type to, from = 0u, len = val.length();
81 while (from < len && std::string::npos !=
82 (to = val.find_first_of(special_chars_, from))) {
83 result << val.substr(from, to - from) << escape_seq_ << val[to];
86 result << val.substr(from) <<
'"';