update README

This commit is contained in:
ado 2021-02-27 18:08:07 +01:00
parent 3ac0962f72
commit 858dac44c0

View File

@ -134,7 +134,7 @@ The method can be used to compare the object, serialize it, deserialize it, etc.
// returns student // returns student
auto s = p.get_next<student>(); auto s = p.get_next<student>();
``` ```
*Note, the order in which the members of the tied method are returned must match the order of the elements in the csv* *Note, the order in which the members of the tied method are returned must match the order of the elements in the csv*.
### Setup ### Setup
By default, many of the features supported by the parser are disabled. They can be enabled within the template parameters of the parser. For example, to enable quoting By default, many of the features supported by the parser are disabled. They can be enabled within the template parameters of the parser. For example, to enable quoting
@ -151,18 +151,19 @@ The setup can also be predefined:
```cpp ```cpp
using my_setup = ss::setup<ss::escape<'\\'>, ss::quote<'"'>>; using my_setup = ss::setup<ss::escape<'\\'>, ss::quote<'"'>>;
// equivalent to p0 and p1 // equivalent to p0 and p1
ss::parser<my_setup> p1{file_name}; ss::parser<my_setup> p2{file_name};
``` ```
*Note, Each setup parameter defined comes with a slight performance loss, so use them only if needed.*
## Quoting ## Quoting
Quoting can be enabled by defining **ss::quote** within the setup parameters. A single character can be defined as the quoting character, for example to use **"** as a quoting character **ss::quote<'\"'>** needs to be defined. Using the example above, if quoting is enabled, those lines would have an equivalent output: Quoting can be enabled by defining **ss::quote** within the setup parameters. A single character can be defined as the quoting character, for example to use **"** as a quoting character **ss::quote<'\\"'>** needs to be defined. Using the example above, if quoting is enabled, those lines would have an equivalent output:
``` ```
James Bailey,65,2.5 James Bailey,65,2.5
"James Bailey",65,2.5 "James Bailey",65,2.5
James Bailey,65,"2.5" James Bailey,65,"2.5"
"James Bailey","65","2.5" "James Bailey","65","2.5"
``` ```
Double quote can be used to escape a quote inside a quoted line. Double quote can be used to escape a quote inside a quoted row.
``` ```
"James ""Bailey""" -> 'James "Bailey"' "James ""Bailey""" -> 'James "Bailey"'
``` ```
@ -182,7 +183,7 @@ James \\Bailey -> 'James \Bailey'
``` ```
Unterminated escapes result in an error. Unterminated escapes result in an error.
``` ```
James Bailey,65,2.5\ -> error James Bailey,65,2.5\\0 -> error
``` ```
Its usage has more impact when used with quoting or spacing: Its usage has more impact when used with quoting or spacing:
``` ```
@ -195,10 +196,12 @@ James Bailey,65,2.5
James Bailey ,65,2.5 James Bailey ,65,2.5
James Bailey, 65, 2.5 James Bailey, 65, 2.5
``` ```
Escaping and quoting can be used to leave the spacing if needed. Escaping and quoting can be used to leave the space if needed.
``` ```
" James Bailey " -> ' James Bailey ' " James Bailey " -> ' James Bailey '
" James Bailey " -> ' James Bailey '
\ James Bailey\ -> ' James Bailey ' \ James Bailey\ -> ' James Bailey '
\ James Bailey\ -> ' James Bailey '
"\ James Bailey\ " -> ' James Bailey ' "\ James Bailey\ " -> ' James Bailey '
``` ```
@ -221,6 +224,40 @@ ss::parser<ss::multiline_restricted<4>, ss::quote<'\"'>, ss::escape<'\\'>> p{fil
James\\n\\n\\nBailey -> 'James\n\n\nBailey' James\\n\\n\\nBailey -> 'James\n\n\nBailey'
"James\n\n\n\n\nBailey" -> error "James\n\n\n\n\nBailey" -> error
``` ```
## Example
An example with a more complicated setup:
```cpp
ss::parser<ss::escape<'\\'>,
ss::quote<'"'>,
ss::trim<' ', '\t'>,
ss::multiline_restricted<5>> p{file_name};
while(!p.eof()) {
auto [name, age, grade] = p.get_next<std::string, int, double>();
if(!p.valid()) {
continue;
}
std::cout << "'" << name << ' ' << age << ' ' << grade << "'" << std::endl;
}
```
input:
```
"James Bailey" , 65 , 2.5\t\t\t
\t \t Brian S. Wolfe, "40" , "\1.9"
"\"Nathan Fielder""" , 37 , Really good grades
"Bill
\"Heath""
Gates",65, 3.3
```
output:
```
'James Bailey 65 2.5'
'Brian S. Wolfe 40 1.9'
'Bill
"Heath"
Gates 65 3.3'
```
### Special types ### Special types
Passing **void** makes the parser ignore a column. In the given example **void** could be given as the second template parameter to ignore the second (age) column in the csv, a tuple of only 2 parameters would be retuned: Passing **void** makes the parser ignore a column. In the given example **void** could be given as the second template parameter to ignore the second (age) column in the csv, a tuple of only 2 parameters would be retuned: