source: proto/CSV/csv2xml/util/csv2xmlwriter.hpp @ 2611

Last change on this file since 2611 was 2611, checked in by linmengl, 6 years ago

finish test with PERF_SEC

File size: 2.4 KB
Line 
1#ifndef CSV2XMLWRITER
2#define CSV2XMLWRITER
3/*
4Helper class to write down xml file from csv input
5*/
6#include <cstdio>
7#include <cstring>
8#include <cstdlib>
9
10const int NO_FILE_OUTPUT = 1;
11
12class Csv2XmlWriter
13{
14private:
15    FILE *_fout;
16    int _rowStarted;
17    int _colStarted;
18    int _needClose;
19    unsigned int _outCount;
20
21    void printString(const char *s)
22    {
23        if (NO_FILE_OUTPUT)
24            _outCount += strlen(s);
25        else
26            fprintf(_fout, "%s", s);
27    }
28
29public:
30    Csv2XmlWriter(FILE *fout)
31    {
32        _fout = fout;
33        init();
34        _needClose = 0;
35    }
36
37    Csv2XmlWriter(char* filename)
38    {
39        _fout = fopen(filename, "w");
40        init();
41        _needClose = 1;
42    }
43
44    ~Csv2XmlWriter()
45    {
46        writeRootEnd();
47
48        if (_needClose)
49            fclose( _fout );
50    }
51
52    void writeColumn(char* fullColumnContent)
53    {
54        if (fullColumnContent[0] == 0)
55            return;
56
57        if (!_colStarted)
58        {
59            writeColumnStart();
60        }
61
62        writeContent(fullColumnContent);
63    }
64
65    void nextCol()
66    {
67        if (!_colStarted)
68            writeColumnStart();
69
70        writeColumnEnd();
71    }
72
73    void nextRow()
74    {
75        if (!_rowStarted)
76            writeRowStart();
77
78        writeRowEnd();
79    }
80
81private:
82    int _rowDepth;
83    int _colDepth;
84    void init()
85    {
86        writeRootStart();
87        _rowStarted = 0;
88        _colStarted = 0;
89        _rowDepth = 0;
90        _colDepth = 0;
91        _outCount = 0;
92    }
93
94    inline void writeContent(char* fullColumnContent)
95    {
96        printString(fullColumnContent);
97    }
98
99    inline void writeRootStart()
100    {
101        printString("<root>\n");
102    }
103
104    inline void writeRootEnd()
105    {
106        printString("</root>\n");
107    }
108
109    inline void writeRowStart()
110    {
111        printString("   <row>\n");
112        _rowDepth++;
113        _rowStarted = 1;
114    }
115
116    inline void writeRowEnd()
117    {
118        if (_rowDepth)
119        {
120            printString("   </row>\n");
121            _rowDepth--;
122        }
123        _rowStarted = 0;
124    }
125
126    inline void writeColumnStart()
127    {
128        if (!_rowStarted)
129        {
130            writeRowStart();
131        }
132
133        printString("      <col>");
134        _colDepth ++;
135        _colStarted = 1;
136    }
137
138    inline void writeColumnEnd()
139    {
140        if (_colDepth)
141        {
142            printString("</col>\n");
143            _colDepth--;
144        }
145        _colStarted = 0;
146    }
147};
148
149#endif //Csv2XmlWriter
Note: See TracBrowser for help on using the repository browser.