7 size_t len = strlen(line);
8 while (len > 0 && (line[len - 1] ==
'\r' || line[len - 1] ==
'\n')) {
33 if (sscanf(reader->line_buffer,
"%ld,%lf,%lf,%lf,%lf,%lf",
34 &(reader->data.candle.timestamp.mark),
35 &(reader->data.candle.open),
36 &(reader->data.candle.high),
37 &(reader->data.candle.low),
38 &(reader->data.candle.close),
39 &(reader->data.candle.volume)) != 6) {
46 return &reader->data.candle;
55 if (sscanf(reader->line_buffer,
"%ld,%lf,%lf,%d",
56 &(reader->data.trade.timestamp.mark),
57 &(reader->data.trade.price),
58 &(reader->data.trade.volume),
64 reader->data.trade.side = (
WU_Side)side_value;
67 return &reader->data.trade;
75 if (sscanf(reader->line_buffer,
"%ld,%lf",
76 &(reader->data.single_value.timestamp.mark),
77 &(reader->data.single_value.value)) != 2) {
84 return &reader->data.single_value;
94 if (!file)
return NULL;
95 WU_CsvReader reader = (WU_CsvReader)malloc(
sizeof(
struct WU_CsvReader_));
96 if (!reader)
return NULL;
98 reader->has_headers = has_headers;
99 reader->data_type = data_type;
104 reader->data.candle.timestamp.units = time_units;
108 reader->data.trade.timestamp.units = time_units;
112 reader->data.single_value.timestamp.units = time_units;
WU_CsvReader wu_csv_reader_new(FILE *file, WU_DataType data_type, WU_TimeUnit time_units, bool has_headers)
static void * read_candle(WU_CsvReader reader)
static void * read_single_value(WU_CsvReader reader)
static bool read_line(WU_CsvReader reader)
static void trim_line(char *line)
static void * read_trade(WU_CsvReader reader)
static void wu_csv_reader_free(WU_CsvReader reader)
#define WU_CSV_MAX_LINE_SIZE
WU_CsvReader is a concrete implementation of the WU_Reader interface that reads data from a CSV file.
Base for a reader, which defines the minimal interface for reading the next data point from a data so...
WU_TimeUnit
WU_TimeUnit represents a unit of time used for time-based calculations such as time-weighted returns ...
WU_Side
WU_Side represents the direction of a signal or a trade.
WU_DataType
WU_DataType represents the type of input data, which can be a candle, a trade, or a single value.
@ WU_DATA_TYPE_SINGLE_VALUE