00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _delimfile_h
00018 #define _delimfile_h
00019
00020 #include <spl/types.h>
00021 #include <spl/Debug.h>
00022
00023 #include <stdio.h>
00024 #include <spl/data/DataTable.h>
00025 #include <spl/Memory.h>
00026 #include <spl/String.h>
00027 #include <spl/io/Stream.h>
00028 #include <spl/text/StringBuffer.h>
00029 #include <spl/io/TextStream.h>
00030
00037 class DelimitedFile;
00038 typedef RefCountPtr<DelimitedFile> DelimitedFilePtr;
00039
00040 REGISTER_TYPEOF(76, DelimitedFilePtr);
00041
00045 class DelimitedFile : public IMemoryValidate
00046 {
00047 protected:
00048 DataTable m_table;
00049
00050 DelimitedFile( );
00051
00052 static DataRowPtr Parse( Array<byte>& cstr, int cstrLen, char coldelim );
00053
00054 public:
00055 DelimitedFile(const DelimitedFile& csv);
00056 virtual ~DelimitedFile();
00057
00058 DelimitedFile& operator =(const DelimitedFile& csv);
00059
00060 inline int RowCount() const { return m_table.RowCount(); }
00061 inline void AddRow( DataRowPtr row ) { m_table.AddRow(row); }
00062 DataRowPtr operator[] (int idx) const;
00063 DataRowPtr RowAt(int idx) const;
00064 inline VariantPtr CellAt( int row, int col ) const { return RowAt(row)->Cell(col); }
00065
00066 bool RowHasData(int row) const;
00067
00068 void Clear();
00069
00070 static DelimitedFilePtr Parse( TextReader& reader, char coldelim );
00071 static DelimitedFilePtr Parse( const String& filename, char coldelim );
00072
00073 #ifdef DEBUG
00074 virtual void ValidateMem() const;
00075 virtual void CheckMem() const;
00076 #endif
00077 };
00078
00079 REGISTER_TYPEOF(78, DelimitedFile);
00080
00083 #endif