TNB Library
TnbGridFile.h
[詳解]
1#pragma once
11#include "TnbFile.h"
12#include "TnbGrid.h"
13
14
15
16//TNB Library
17namespace TNB
18{
19
20
21
33class CGridFile : public CGrid
34{
35 DEFSUPER(CGrid);
36public:
37
46 bool LoadCsvFile(LPCTSTR lpszFileName, bool hasHeadLine = true)
47 {
48 _super::AllDeleteRecord();
49 CFileReader fr;
50 if ( fr.Open(lpszFileName) )
51 {
52 try
53 {
54 m_Load(fr, hasHeadLine);
55 }
56 catch ( CTnbException& e )
57 {
58 e.OnCatch();
59 _super::AllDeleteRecord();
60 return false;
61 }
62 catch ( ... )
63 {
64 throw;
65 }
66 return true;
67 }
68 return false;
69 }
70
78 bool SaveCsvFile(LPCTSTR lpszFileName, bool hasHeadLine = true) const
79 {
80 CFileWriter fw;
81 if ( fw.New(lpszFileName) )
82 {
83 try
84 {
85 m_Save(fw, hasHeadLine);
86 }
87 catch ( CTnbException& e )
88 {
89 e.OnCatch();
90 return false;
91 }
92 catch ( ... )
93 {
94 throw;
95 }
96 return true;
97 }
98 return false;
99 }
100
101private:
108 void m_Load(const IReader& r, bool hasHeadLine)
109 {
110 CByteVector vb = r.ReadExactly();
111 vb.Add(0); //終端
112 CVectorT<CAscii> vaa = CAsciiOperator::SeparateLine(reinterpret_cast<LPCSTR>(vb.ReferBuffer()));
113 if ( hasHeadLine )
114 {
115 vaa.Remove(0); //一行目を削除
116 }
117 //=== レコード読込み
118 while ( ! vaa.IsEmpty() )
119 {
121 if ( ! va.IsEmpty() )
122 {
123 INDEX rec = _super::AddRecord();
124 ASSERT( rec != INVALID_INDEX );
125 loop ( i, min(va.GetSize(), _super::GetFieldCount()) )
126 {
127 TFieldInfo fi;
128 EFieldKind k = _super::GetFieldInfo(fi, i);
129 ASSERT( k != EK_Invalid );
130 CAscii a;
131 a.SetFromLeft(va[i], fi.width);
132 if ( ! _super::SetStringRecord(rec, i, CStr(a)) )
133 {
135 }
136 }
137 }
138 vaa.Remove(0);
139 }
140 _super::Dump();
141 }
142
149 void m_Save(IWriter& _w, bool hasHeadLine) const
150 {
151 CAscii s;
152 BYTE CR = 0x0D;
153 //=== ヘッダ書き出し
154 if ( hasHeadLine )
155 {
156 loop ( i, _super::GetFieldCount() )
157 {
158 if ( i != 0 )
159 {
160 s += ",";
161 }
162 TFieldInfo fi;
163 if ( _super::GetFieldInfo(fi, i) == EK_Invalid )
164 {
166 }
167 s += CAscii(fi.name);
168 }
169 _w.Write(s.GetLength(), s.operator LPCSTR());
170 _w.Write(sizeof(BYTE), &CR);
171 }
172 //=== レコード書き出し
173 loop ( i, GetRecordCount() )
174 {
175 INDEX rec = i;
176 loop ( i, _super::GetFieldCount() )
177 {
178 if ( i != 0 )
179 {
180 s += ",";
181 }
182 s += _super::GetStringRecord(rec, i, true);
183 }
184 _w.Write(s.GetLength(), s.operator LPCSTR());
185 _w.Write(sizeof(BYTE), &CR);
186 }
187 }
188 friend class CGridFileTest;
189};
190
191
192
193}; // TNB
194
195
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ファイル関係のヘッダ
グリッド情報管理関係のヘッダ
ファイル読み込みクラス
Definition: TnbFile.h:338
bool Open(LPCTSTR lpszName, bool boIsShare=true, bool boDummy=false)
[操作] オープン
Definition: TnbFile.h:364
ファイル書き込みクラス
Definition: TnbFile.h:475
bool New(LPCTSTR lpszName, bool boIsShare=true)
[操作] 新規オープン.
Definition: TnbFile.h:501
Gridファイル管理クラス
Definition: TnbGridFile.h:34
bool LoadCsvFile(LPCTSTR lpszFileName, bool hasHeadLine=true)
[読込] CSVファイル読込み.
Definition: TnbGridFile.h:46
bool SaveCsvFile(LPCTSTR lpszFileName, bool hasHeadLine=true) const
[書出] CSVファイル書き出し
Definition: TnbGridFile.h:78
グリッド管理クラス.
Definition: TnbGrid.h:33
EFieldKind
フィールド種類
Definition: TnbGrid.h:38
@ EK_Invalid
不正
Definition: TnbGrid.h:43
size_t GetRecordCount(void) const
[取得] レコード数取得
Definition: TnbGrid.h:148
パラメータ不正例外
Definition: TnbException.h:159
static CVectorT< CStrT< TYP > > SeparatePeriod(const TYP *lpsz, const TYP *lpszMark, bool isCheckDc=true)
[取得] トークン区切取得
static CVectorT< CStrT< TYP > > SeparateLine(const TYP *lpsz)
[取得] 改行毎分離
size_t GetLength(void) const
[取得] 文字列長
Definition: TnbStr.h:518
CStrT & SetFromLeft(const TYP *lpText, size_t iLen)
[代入] 文字数制限代入.
Definition: TnbStr.h:278
例外ベースクラス
Definition: TnbException.h:36
void OnCatch(void) const
[表示] 内容表示
Definition: TnbException.h:69
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
Definition: TnbVector.h:397
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
TNB::CStrT< char > CAscii
ASCII文字列クラス
Definition: TnbStr.h:1758
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
TNB Library
Definition: TnbDoxyTitle.txt:2
bool IsEmpty(void) const
[確認] 要素の有無確認.
読み込みインターフェース
Definition: TnbReader.h:36
void ReadExactly(size_t size, LPVOID _P) const
[取得] 読み込み.
Definition: TnbReader.h:114
書き込みインターフェース
Definition: TnbWriter.h:36
virtual void Write(size_t size, LPCVOID P)=0
[保存] 書き込み