mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
csv support linebreaks
This commit is contained in:
parent
cb51cc95b6
commit
101cf24a36
11
src/csv.cpp
11
src/csv.cpp
@ -16,9 +16,11 @@ void add_module_csv(VM *vm){
|
||||
if (strncmp(line.data(), "\xEF\xBB\xBF", 3) == 0) line = line.substr(3);
|
||||
}
|
||||
List row;
|
||||
int j = 0;
|
||||
int j;
|
||||
bool in_quote = false;
|
||||
std::string buffer;
|
||||
__NEXT_LINE:
|
||||
j = 0;
|
||||
while(j < line.size()){
|
||||
switch(line[j]){
|
||||
case '"':
|
||||
@ -50,7 +52,14 @@ void add_module_csv(VM *vm){
|
||||
j++;
|
||||
}
|
||||
if(in_quote){
|
||||
if(i == csvfile.size()-1){
|
||||
vm->ValueError("unterminated quote");
|
||||
}else{
|
||||
buffer += '\n';
|
||||
i++;
|
||||
line = CAST(Str&, csvfile[i]).sv();
|
||||
goto __NEXT_LINE;
|
||||
}
|
||||
}
|
||||
row.push_back(VAR(buffer));
|
||||
ret.push_back(VAR(std::move(row)));
|
||||
|
@ -31,6 +31,14 @@ test("""a,b ,c,
|
||||
1,"22""33",3
|
||||
""", [['a', 'b ', 'c', ''], ['1', '22"33', '3']])
|
||||
|
||||
# newline
|
||||
test('''a,b,c
|
||||
1,2,"3,
|
||||
4"
|
||||
5,"a,""
|
||||
b",7
|
||||
''', [['a', 'b', 'c'], ['1', '2', '3,\n 4'], ['5', 'a,"\nb', '7']])
|
||||
|
||||
ret = csv.DictReader("""a,b,c
|
||||
1,2,3
|
||||
"4",5,6
|
||||
|
Loading…
x
Reference in New Issue
Block a user