csvzall 0.4.0
CSV command-line tool and emerging C++ library
Loading...
Searching...
No Matches
indexed_csv.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <csv.hpp>
4
5#include <cstddef>
6#include <cstdint>
7#include <filesystem>
8#include <functional>
9#include <optional>
10#include <string>
11#include <string_view>
12#include <unordered_map>
13#include <vector>
14
15namespace csvzall::viewer {
16
18 std::uint64_t byte_offset = 0;
19};
20
22 std::string name;
23 std::optional<std::size_t> source_index;
24 std::string default_value;
25};
26
28 std::optional<std::uint64_t> source_row;
29 std::unordered_map<std::string, std::string> cells;
30};
31
33 public:
34 static CsvIndexedFile Open(
35 const std::string& input_path,
36 csv::CSVFormat format,
37 std::function<void(const std::string&)> verbose = {});
38
39 [[nodiscard]] const std::string& input_path() const;
40 [[nodiscard]] const std::string& file_name() const;
41 [[nodiscard]] const std::vector<std::string>& headers() const;
42 [[nodiscard]] std::uint64_t row_count() const;
43 [[nodiscard]] std::uint64_t file_size() const;
44
45 [[nodiscard]] std::vector<std::vector<std::string>> read_rows(
46 std::uint64_t offset,
47 std::uint64_t limit) const;
48
49 void edit_cell(std::uint64_t row, const std::string& column, const std::string& value);
50 void delete_row(std::uint64_t row);
51 void insert_row(std::uint64_t row, const std::vector<std::string>& values);
52 void swap_rows(std::uint64_t first, std::uint64_t second);
53 void insert_column(std::uint64_t column, const std::string& name, const std::string& value);
54 void rename_column(const std::string& column, const std::string& name);
55 void delete_column(const std::string& column);
57 void reset();
58 void save(const std::vector<std::string>& columns = {});
59
60 private:
61 [[nodiscard]] std::vector<std::vector<std::string>> read_source_rows(
62 std::uint64_t offset,
63 std::uint64_t limit) const;
64 [[nodiscard]] std::vector<std::string> read_source_row(std::uint64_t source_row) const;
65 [[nodiscard]] std::vector<std::string> row_values_for_columns(
66 const CsvLogicalRow& row,
67 const std::vector<CsvColumnDescriptor>& columns) const;
68 [[nodiscard]] std::size_t column_index(const std::string& column) const;
69 [[nodiscard]] bool has_column(const std::string& column) const;
70 void refresh_headers();
71 void validate_column_order(const std::vector<std::string>& columns) const;
72 [[nodiscard]] std::vector<CsvColumnDescriptor> ordered_columns(
73 const std::vector<std::string>& columns) const;
74 void reload();
75
76 std::string input_path_;
77 std::string file_name_;
78 std::vector<std::string> headers_;
79 std::vector<CsvColumnDescriptor> columns_;
80 std::vector<CsvRowIndexEntry> index_;
81 std::vector<CsvLogicalRow> rows_;
82 std::uint64_t file_size_ = 0;
83 std::filesystem::file_time_type source_mtime_{};
84 csv::CSVFormat format_;
85};
86
87enum class CsvViewDataMode {
88 Paged,
89};
90
92 public:
93 static CsvViewData Open(
94 const std::string& input_path,
95 csv::CSVFormat format,
96 std::function<void(const std::string&)> verbose = {});
97
98 [[nodiscard]] CsvViewDataMode mode() const;
99 [[nodiscard]] std::string_view mode_name() const;
100 [[nodiscard]] const std::string& input_path() const;
101 [[nodiscard]] const std::string& file_name() const;
102 [[nodiscard]] const std::vector<std::string>& headers() const;
103 [[nodiscard]] std::uint64_t row_count() const;
104 [[nodiscard]] std::uint64_t file_size() const;
105
106 [[nodiscard]] std::vector<std::vector<std::string>> read_rows(
107 std::uint64_t offset,
108 std::uint64_t limit) const;
109
110 void edit_cell(std::uint64_t row, const std::string& column, const std::string& value);
111 void delete_row(std::uint64_t row);
112 void insert_row(std::uint64_t row, const std::vector<std::string>& values);
113 void swap_rows(std::uint64_t first, std::uint64_t second);
114 void insert_column(std::uint64_t column, const std::string& name, const std::string& value);
115 void rename_column(const std::string& column, const std::string& name);
116 void delete_column(const std::string& column);
118 void reset();
119 void save(const std::vector<std::string>& columns = {});
120
121 private:
123
124 CsvIndexedFile data_;
125};
126
127} // namespace csvzall::viewer
std::string second
Definition heatmap.cpp:31
std::string first
Definition heatmap.cpp:30
Definition indexed_csv.hpp:32
const std::string & file_name() const
Definition indexed_csv.cpp:182
void swap_rows(std::uint64_t first, std::uint64_t second)
Definition indexed_csv.cpp:400
const std::vector< std::string > & headers() const
Definition indexed_csv.cpp:186
void delete_column(const std::string &column)
Definition indexed_csv.cpp:449
static CsvIndexedFile Open(const std::string &input_path, csv::CSVFormat format, std::function< void(const std::string &)> verbose={})
Definition indexed_csv.cpp:137
void save(const std::vector< std::string > &columns={})
Definition indexed_csv.cpp:501
void insert_column(std::uint64_t column, const std::string &name, const std::string &value)
Definition indexed_csv.cpp:410
void insert_row(std::uint64_t row, const std::vector< std::string > &values)
Definition indexed_csv.cpp:385
std::uint64_t row_count() const
Definition indexed_csv.cpp:190
std::vector< std::vector< std::string > > read_rows(std::uint64_t offset, std::uint64_t limit) const
Definition indexed_csv.cpp:277
const std::string & input_path() const
Definition indexed_csv.cpp:178
void edit_cell(std::uint64_t row, const std::string &column, const std::string &value)
Definition indexed_csv.cpp:366
void reset()
Definition indexed_csv.cpp:496
void rename_column(const std::string &column, const std::string &name)
Definition indexed_csv.cpp:427
void delete_row(std::uint64_t row)
Definition indexed_csv.cpp:378
std::uint64_t file_size() const
Definition indexed_csv.cpp:194
bool recover_renamed_source()
Definition indexed_csv.cpp:461
Definition indexed_csv.hpp:91
CsvViewDataMode mode() const
Definition indexed_csv.cpp:559
void save(const std::vector< std::string > &columns={})
Definition indexed_csv.cpp:633
static CsvViewData Open(const std::string &input_path, csv::CSVFormat format, std::function< void(const std::string &)> verbose={})
Definition indexed_csv.cpp:549
void insert_row(std::uint64_t row, const std::vector< std::string > &values)
Definition indexed_csv.cpp:603
const std::string & input_path() const
Definition indexed_csv.cpp:567
void swap_rows(std::uint64_t first, std::uint64_t second)
Definition indexed_csv.cpp:607
void reset()
Definition indexed_csv.cpp:629
void edit_cell(std::uint64_t row, const std::string &column, const std::string &value)
Definition indexed_csv.cpp:593
void rename_column(const std::string &column, const std::string &name)
Definition indexed_csv.cpp:617
std::uint64_t file_size() const
Definition indexed_csv.cpp:583
const std::vector< std::string > & headers() const
Definition indexed_csv.cpp:575
bool recover_renamed_source()
Definition indexed_csv.cpp:625
std::string_view mode_name() const
Definition indexed_csv.cpp:563
void delete_row(std::uint64_t row)
Definition indexed_csv.cpp:599
std::uint64_t row_count() const
Definition indexed_csv.cpp:579
std::vector< std::vector< std::string > > read_rows(std::uint64_t offset, std::uint64_t limit) const
Definition indexed_csv.cpp:587
const std::string & file_name() const
Definition indexed_csv.cpp:571
void delete_column(const std::string &column)
Definition indexed_csv.cpp:621
void insert_column(std::uint64_t column, const std::string &name, const std::string &value)
Definition indexed_csv.cpp:611
std::vector< ColumnMapping > columns
Definition json_extract.cpp:353
std::string name
Definition json_extract.cpp:347
std::vector< JsonValue > array
Definition json_extract.cpp:33
Definition indexed_csv.cpp:23
CsvViewDataMode
Definition indexed_csv.hpp:87
Definition indexed_csv.hpp:21
std::optional< std::size_t > source_index
Definition indexed_csv.hpp:23
std::string default_value
Definition indexed_csv.hpp:24
std::string name
Definition indexed_csv.hpp:22
Definition indexed_csv.hpp:27
std::unordered_map< std::string, std::string > cells
Definition indexed_csv.hpp:29
std::optional< std::uint64_t > source_row
Definition indexed_csv.hpp:28
Definition indexed_csv.hpp:17
std::uint64_t byte_offset
Definition indexed_csv.hpp:18
double value
Definition timeseries.cpp:32