11#ifndef CROCODDYL_CORE_UTILS_FILE_IO_HPP_
12#define CROCODDYL_CORE_UTILS_FILE_IO_HPP_
21 const std::string separator_;
22 const std::string escape_seq_;
23 const std::string special_chars_;
26 CsvStream(
const std::string filename,
const std::string separator =
",")
27 : fs_(), is_first_(
true), separator_(separator), escape_seq_(
"\""), special_chars_(
"\"") {
28 fs_.exceptions(std::ios::failbit | std::ios::badbit);
29 fs_.open(filename.c_str());
37 void flush() { fs_.flush(); }
51 CsvStream& operator<<(
const char* val) {
return write(escape(val)); }
53 CsvStream& operator<<(
const std::string& val) {
return write(escape(val)); }
72 std::string escape(
const std::string& val) {
73 std::ostringstream result;
75 std::string::size_type to, from = 0u, len = val.length();
76 while (from < len && std::string::npos != (to = val.find_first_of(special_chars_, from))) {
77 result << val.substr(from, to - from) << escape_seq_ << val[to];
80 result << val.substr(from) <<
'"';