Commit b940241e authored by Paul Asmuth's avatar Paul Asmuth
Browse files

read csv rows...

parent ac8723ea
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -43,9 +43,9 @@ TEST_CASE(CSVInputStreamTest, TestReadHeaders, [] () {
  EXPECT(csv_file.get() != nullptr);
  std::vector<std::string> headers;
  csv_file->readNextRow(&headers);
  EXPECT(headers.size() == 2);
  EXPECT(headers[0] == "country");
  EXPECT(headers[1] == "gbp");
  EXPECT_EQ(headers.size(), 2);
  EXPECT_EQ(headers[0], std::string("country"));
  EXPECT_EQ(headers[1], "gbp");
});


+23 −11
Original line number Diff line number Diff line
@@ -33,22 +33,34 @@ CSVInputStream::CSVInputStream(
    char column_seperator /* = ',' */,
    char row_seperator /* = '\n' */,
    char quote_char /* = '"' */) :
    input_(std::move(input_stream)) {}
    input_(std::move(input_stream)),
    column_seperator_(column_seperator),
    row_seperator_(row_seperator),
    quote_char_(quote_char) {}

void CSVInputStream::readNextRow(std::vector<std::string>* target) {
  target->emplace_back(readNextColumn());
}

// FIXPAUL optimize?
std::string CSVInputStream::readNextColumn() {
  for (;;) {
    std::string column;
    char byte;

    while (input_->readNextByte(&byte)) {
    printf("byte: %c\n", byte);
      if (byte == column_seperator_) {
        break;
      }

  return column;
      if (byte == row_seperator_) {
        break;
      }

      column += byte;
    }

    target->emplace_back(column);

    if (byte == row_seperator_) {
      break;
    }
  }
}

}
+3 −0
Original line number Diff line number Diff line
@@ -52,6 +52,9 @@ protected:
  std::string readNextColumn();

  std::unique_ptr<fnordmetric::util::InputStream> input_;
  const char column_seperator_;
  const char row_seperator_;
  const char quote_char_;
};

}
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ namespace util {
          "expectation failed: %s", #X); \
    }

#define EXPECT_EQ(X, Y) \
    EXPECT((X) == (Y));

#define EXPECT_EXCEPTION(E, L) \
    { \
      bool raised = false; \