1/*************** TabFmt H Declares Source Code File (.H) ***************/
2/* Name: TABFMT.H Version 2.5 */
3/* */
4/* (C) Copyright to the author Olivier BERTRAND 2001-2016 */
5/* */
6/* This file contains the CSV and FMT classes declares. */
7/***********************************************************************/
8#include "xtable.h" // Base class declares
9#include "tabdos.h"
10
11typedef class TDBFMT *PTDBFMT;
12
13/***********************************************************************/
14/* Functions used externally. */
15/***********************************************************************/
16PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info);
17
18/***********************************************************************/
19/* CSV table. */
20/***********************************************************************/
21class DllExport CSVDEF : public DOSDEF { /* Logical table description */
22 friend class TDBCSV;
23 friend class TDBCCL;
24 friend PQRYRES CSVColumns(PGLOBAL, PCSZ, PTOS, bool);
25public:
26 // Constructor
27 CSVDEF(void);
28
29 // Implementation
30 virtual const char *GetType(void) {return "CSV";}
31 char GetSep(void) {return Sep;}
32 char GetQot(void) {return Qot;}
33
34 // Methods
35 virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
36 virtual PTDB GetTable(PGLOBAL g, MODE mode);
37
38 protected:
39 // Members
40 bool Fmtd; /* true for formatted files */
41//bool Accept; /* true if wrong lines are accepted */
42 bool Header; /* true if first line contains headers */
43//int Maxerr; /* Maximum number of bad records */
44 int Quoted; /* Quoting level for quoted fields */
45 char Sep; /* Separator for standard CSV files */
46 char Qot; /* Character for quoted strings */
47 }; // end of CSVDEF
48
49/***********************************************************************/
50/* This is the DOS/UNIX Access Method class declaration for files */
51/* that are CSV files with columns separated by the Sep character. */
52/***********************************************************************/
53class DllExport TDBCSV : public TDBDOS {
54 friend class CSVCOL;
55 friend class MAPFAM;
56 friend PQRYRES CSVColumns(PGLOBAL, PCSZ, PTOS, bool);
57public:
58 // Constructor
59 TDBCSV(PCSVDEF tdp, PTXF txfp);
60 TDBCSV(PGLOBAL g, PTDBCSV tdbp);
61
62 // Implementation
63 virtual AMT GetAmType(void) {return TYPE_AM_CSV;}
64 virtual PTDB Duplicate(PGLOBAL g)
65 {return (PTDB)new(g) TDBCSV(g, this);}
66
67 // Methods
68 virtual PTDB Clone(PTABS t);
69//virtual bool IsUsingTemp(PGLOBAL g);
70 virtual int GetBadLines(void) {return (int)Nerr;}
71
72 // Database routines
73 virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
74 virtual bool OpenDB(PGLOBAL g);
75 virtual int WriteDB(PGLOBAL g);
76 virtual int CheckWrite(PGLOBAL g);
77 virtual int ReadBuffer(PGLOBAL g); // Physical file read
78
79 // Specific routines
80 virtual int EstimatedLength(void);
81 virtual bool SkipHeader(PGLOBAL g);
82 virtual bool CheckErr(void);
83
84 protected:
85 virtual bool PrepareWriting(PGLOBAL g);
86
87 // Members
88 PSZ *Field; // Field to write to current line
89 int *Offset; // Column offsets for current record
90 int *Fldlen; // Column field length for current record
91 bool *Fldtyp; // true for numeric fields
92 int Fields; // Number of fields to handle
93 int Nerr; // Number of bad records
94 int Maxerr; // Maximum number of bad records
95 int Quoted; // Quoting level for quoted fields
96 bool Accept; // true if bad lines are accepted
97 bool Header; // true if first line contains column headers
98 char Sep; // Separator
99 char Qot; // Quoting character
100 }; // end of class TDBCSV
101
102/***********************************************************************/
103/* Class CSVCOL: CSV access method column descriptor. */
104/* This A.M. is used for Comma Separated V(?) files. */
105/***********************************************************************/
106class DllExport CSVCOL : public DOSCOL {
107 friend class TDBCSV;
108 friend class TDBFMT;
109 public:
110 // Constructors
111 CSVCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
112 CSVCOL(CSVCOL *colp, PTDB tdbp); // Constructor used in copy process
113
114 // Implementation
115 virtual int GetAmType() {return TYPE_AM_CSV;}
116
117 // Methods
118 virtual bool VarSize(void);
119 virtual void ReadColumn(PGLOBAL g);
120 virtual void WriteColumn(PGLOBAL g);
121
122 protected:
123 // Default constructor not to be used
124 CSVCOL(void) {}
125
126 // Members
127 int Fldnum; // Field ordinal number (0 based)
128 }; // end of class CSVCOL
129
130/***********************************************************************/
131/* This is the DOS/UNIX Access Method class declaration for files */
132/* whose record format is described by a Format keyword. */
133/***********************************************************************/
134class DllExport TDBFMT : public TDBCSV {
135 friend class CSVCOL;
136//friend class FMTCOL;
137 public:
138 // Standard constructor
139 TDBFMT(PCSVDEF tdp, PTXF txfp) : TDBCSV(tdp, txfp)
140 {FldFormat = NULL; To_Fld = NULL; FmtTest = NULL; Linenum = 0;}
141
142 // Copy constructor
143 TDBFMT(PGLOBAL g, PTDBFMT tdbp);
144
145 // Implementation
146 virtual AMT GetAmType(void) {return TYPE_AM_FMT;}
147 virtual PTDB Duplicate(PGLOBAL g)
148 {return (PTDB)new(g) TDBFMT(g, this);}
149
150 // Methods
151 virtual PTDB Clone(PTABS t);
152
153 // Database routines
154 virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
155//virtual int GetMaxSize(PGLOBAL g);
156 virtual bool OpenDB(PGLOBAL g);
157 virtual int WriteDB(PGLOBAL g);
158//virtual int CheckWrite(PGLOBAL g);
159 virtual int ReadBuffer(PGLOBAL g); // Physical file read
160
161 // Specific routines
162 virtual int EstimatedLength(void);
163
164 protected:
165 virtual bool PrepareWriting(PGLOBAL g)
166 {sprintf(g->Message, MSG(TABLE_READ_ONLY), "FMT"); return true;}
167
168 // Members
169 PSZ *FldFormat; // Field read format
170 void *To_Fld; // To field test buffer
171 int *FmtTest; // Test on ending by %n or %m
172 int Linenum; // Last read line
173 }; // end of class TDBFMT
174
175/***********************************************************************/
176/* This is the class declaration for the CSV catalog table. */
177/***********************************************************************/
178class DllExport TDBCCL : public TDBCAT {
179 public:
180 // Constructor
181 TDBCCL(PCSVDEF tdp);
182
183 protected:
184 // Specific routines
185 virtual PQRYRES GetResult(PGLOBAL g);
186
187 // Members
188 PTOS Topt;
189}; // end of class TDBCCL
190
191/* ------------------------- End of TabFmt.H ------------------------- */
192