aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/csv/csv.h
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2022-12-23 17:22:10 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2022-12-23 17:22:10 +0300
commitf6fd83a9bc9c2d6bb9502d3dd77adb4f5c31ceae (patch)
treecca463108bcf236b61344602b47f474ce42b1ff4 /library/cpp/string_utils/csv/csv.h
parentaf6d4963aeec3543ef895865a0a24fa2e039efa3 (diff)
downloadydb-f6fd83a9bc9c2d6bb9502d3dd77adb4f5c31ceae.tar.gz
parse line on deploy by option
Diffstat (limited to 'library/cpp/string_utils/csv/csv.h')
-rw-r--r--library/cpp/string_utils/csv/csv.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/library/cpp/string_utils/csv/csv.h b/library/cpp/string_utils/csv/csv.h
new file mode 100644
index 0000000000..8cb96e6bb9
--- /dev/null
+++ b/library/cpp/string_utils/csv/csv.h
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <util/generic/yexception.h>
+#include <util/generic/strbuf.h>
+#include <util/generic/vector.h>
+#include <util/stream/input.h>
+
+/*
+ Split string by rfc4180
+*/
+
+namespace NCsvFormat {
+ class TLinesSplitter {
+ private:
+ IInputStream& Input;
+ const char Quote;
+ public:
+ TLinesSplitter(IInputStream& input, const char quote = '"')
+ : Input(input)
+ , Quote(quote) {
+ }
+ TString ConsumeLine();
+ };
+
+ class CsvSplitter {
+ public:
+ CsvSplitter(TString& data, const char delimeter = ',', const char quote = '"')
+ // quote = '\0' ignores quoting in values and words like simple split
+ : Delimeter(delimeter)
+ , Quote(quote)
+ , Begin(data.begin())
+ , End(data.end())
+ {
+ }
+
+ bool Step() {
+ if (Begin == End) {
+ return false;
+ }
+ ++Begin;
+ return true;
+ }
+
+ TStringBuf Consume();
+ explicit operator TVector<TString>() {
+ TVector<TString> ret;
+
+ do {
+ TStringBuf buf = Consume();
+ ret.push_back(TString{buf});
+ } while (Step());
+
+ return ret;
+ }
+
+ private:
+ const char Delimeter;
+ const char Quote;
+ TString::iterator Begin;
+ const TString::const_iterator End;
+ TString CustomString;
+ TVector<TStringBuf> CustomStringBufs;
+ };
+}