| 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 |  | 
| 11 | typedef class  TDBFMT    *PTDBFMT; | 
| 12 |  | 
| 13 | /***********************************************************************/ | 
| 14 | /*  Functions used externally.                                         */ | 
| 15 | /***********************************************************************/ | 
| 16 | PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info); | 
| 17 |  | 
| 18 | /***********************************************************************/ | 
| 19 | /*  CSV table.                                                         */ | 
| 20 | /***********************************************************************/ | 
| 21 | class DllExport CSVDEF : public DOSDEF { /* Logical table description  */ | 
| 22 |   friend class TDBCSV; | 
| 23 |   friend class TDBCCL; | 
| 24 | 	friend PQRYRES CSVColumns(PGLOBAL, PCSZ, PTOS, bool); | 
| 25 | public: | 
| 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    ;             /* 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 | /***********************************************************************/ | 
| 53 | class DllExport TDBCSV : public TDBDOS { | 
| 54 |   friend class CSVCOL; | 
| 55 | 	friend class MAPFAM; | 
| 56 | 	friend PQRYRES CSVColumns(PGLOBAL, PCSZ, PTOS, bool); | 
| 57 | public: | 
| 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 (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  ;            // 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 | /***********************************************************************/ | 
| 106 | class 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 | /***********************************************************************/ | 
| 134 | class 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 | /***********************************************************************/ | 
| 178 | class 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 |  |