1#include "csv.h"
2
3#include <base/io.h>
4#include <base/str.h>
5
6void CsvWrite(IOHANDLE File, int NumColumns, const char *const *ppColumns)
7{
8 for(int i = 0; i < NumColumns; i++)
9 {
10 if(i != 0)
11 {
12 io_write(io: File, buffer: ",", size: 1);
13 }
14 const char *pColumn = ppColumns[i];
15 int ColumnLength = str_length(str: pColumn);
16 if(!str_find(haystack: pColumn, needle: "\"") && !str_find(haystack: pColumn, needle: ","))
17 {
18 io_write(io: File, buffer: pColumn, size: ColumnLength);
19 continue;
20 }
21
22 int Start = 0;
23 io_write(io: File, buffer: "\"", size: 1);
24 for(int j = 0; j < ColumnLength; j++)
25 {
26 if(pColumn[j] == '"')
27 {
28 if(Start != j)
29 {
30 io_write(io: File, buffer: pColumn + Start, size: j - Start);
31 }
32 Start = j + 1;
33 io_write(io: File, buffer: "\"\"", size: 2);
34 }
35 }
36 if(Start != ColumnLength)
37 {
38 io_write(io: File, buffer: pColumn + Start, size: ColumnLength - Start);
39 }
40 io_write(io: File, buffer: "\"", size: 1);
41 }
42 io_write_newline(io: File);
43}
44