导表工具
確認(rèn)怎么寫導(dǎo)表工具需要先確定開發(fā)環(huán)境,數(shù)據(jù)存儲(chǔ)結(jié)構(gòu).
假設(shè)采用的數(shù)據(jù)載體是csv
如果沒有編譯成本比如python這樣的腳本語言,做法很簡單:(假設(shè)使用的是python)
1.解析csv文件,讀到內(nèi)存中來叫做sheet_map
2.通過讀出來的sheet_map寫成python代碼
3.寫一些通用的讀數(shù)據(jù)函數(shù)
細(xì)節(jié):
目錄結(jié)構(gòu):
tool
csv----------用于存放csv文件
tplfile-------用于存放模板文件
midfile------用于存放中間文件
outfile------用于存放最終文件
csv文件不用說就是策劃填寫的數(shù)據(jù)表格
tplfile是模板,主要是策劃數(shù)據(jù)表和數(shù)據(jù)類型的映射關(guān)系
比如 tpl = {
"編號(hào)":("id", TO_INT, ),
"名字":("name", TO_STR, ),
"職業(yè)":("sch", TO_INT, ),
}
midfile是中間文件,也就是上面說的sheet_map,是從csv中讀出來的數(shù)據(jù),這里可以把所有的數(shù)據(jù)都存成string,這一步不需要考慮數(shù)據(jù)類型
比如 sheet_map = {
1:("name":"test", ?"sch":"1", ),
}
outfile是最終的文件通過模板解析sheet_map,最終寫的py文件,有了sheet_map和tpl就可以很輕松的分析出來name的類型是string,sch的類型是int
data = {
1:("name":"test", "sch":1),
}
如果有編譯成本,比如C++
1.工具依然選擇用python寫,解析svn,load到內(nèi)存一個(gè)sheet_map
2.因?yàn)槭莄++所以不能直接使用sheet_map,這是要寫成文件,提供給C++使用,假設(shè)叫做data_table
3.讀data_table和tpl文件分析每個(gè)數(shù)據(jù)的類型寫成頭文件
比如
xxx.h
1 struct xxx{ 2 std::string name; // 名字 3 int sch; // 職業(yè) 4 }; 5 6 typedef std::map<int, xxx> xxx_pool; 7 8 bool load_xxx();?
這里一定不要賦值,不然表格少做修改,而帶來的編譯代價(jià)是很大的,所以寫一個(gè)load的函數(shù)
4.通過頭文件和tpl寫源文件
比如
static xxx_pool s_xxx;bool load_xxx(){auto table = openTable("midfile/xxx.data");if ( !table )return false;for ( auto iter : (*table) ){xxx v;int key;(*iter) >> key;parse_data(v.name, "name", iter); // 名字parse_data(v.sch, "sch", iter); // 職業(yè) s_xxx[key] = v;}return true;}5. cpp中包含一個(gè)common.h,這個(gè)文件不是生成的,是本地存在的一些同用函數(shù),用來實(shí)現(xiàn)openTable和parse_data
template<typename T>void parse_data(T & v, const std::string & field, DataTablePtr value);void parse_data(int & prev, const std::string & field, DataTablePtr value);DataTablePtr openTable(const std::string & filename);?
over
轉(zhuǎn)載于:https://www.cnblogs.com/iamkevin/p/3695784.html
總結(jié)
 
                            
                        - 上一篇: 模板类的全特化、偏特化
- 下一篇: Hash Table Benchmark
