csv文件存儲數(shù)據(jù)時在結(jié)構(gòu)上基本和一個數(shù)據(jù)庫表相當(dāng),不過因為讀寫方便,所以使用頻率很高,例如輸出一些臨時結(jié)果,或者持續(xù)記錄類似日志形式的數(shù)據(jù)。不過,當(dāng)需要對這些數(shù)據(jù)進(jìn)一步處理時,如果還要先導(dǎo)入數(shù)據(jù)庫,那么csv本身的便利性也就沒有了。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)琿春,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575事實上,通過集算器,可以直接對csv文件進(jìn)行處理,而且還可以進(jìn)行一些“高級”操作,就像本文要介紹的比較兩個csv文件的差異。
假設(shè)在一個簡單的銷售系統(tǒng)中,前端系統(tǒng)只負(fù)責(zé)錄入,包括新增、修改和刪除訂單,同時,每天會把數(shù)據(jù)文件做一次備份歸檔。在后期分析中,需要查看某個時間段內(nèi)的新增、取消和修改的訂單。下面就是不使用數(shù)據(jù)庫,直接比較csv文件的操作。
例子中使用了2015年3月的兩個文件,早一點(diǎn)的是old.csv,晚一點(diǎn)的是new.csv。文件中的邏輯主鍵是userName和date,需要分別找出新增的、刪除的、修改的數(shù)據(jù)行。源文件如下:
Old.csv | New.csv | |
1 2 3 4 5 6 7 8 9 | userName,date,saleValue,saleCount Rachel,2015-03-01,4500,9 Rachel,2015-03-03,8700,4 Tom,2015-03-02,3000,8 Tom,2015-03-03,5000,7 Tom,2015-03-04,6000,12 John,2015-03-02,4000,3 John,2015-03-02,4300,9 John,2015-03-04,4800,4 | userName,date,saleValue,saleCount Rachel,2015-03-01,4500,9 Rachel,2015-03-02,5000,5 Ashley,2015-03-01,6000,5 Rachel,2015-03-03,11700,4 Tom,2015-03-03,5000,7 Tom,2015-03-04,6000,12 John,2015-03-02,4000,3 John,2015-03-02,4300,9 John,2015-03-04,4800,4 |
直接觀察數(shù)據(jù),可以看到new.csv中的第2、3行是新增的記錄,第4行是修改的記錄,old.csv中第3行是刪除的記錄。
集算器代碼如下:
A | B | |
1 | =file("d:\\old.csv").import@t(;,",") | =file("d:\\new.csv").import@t(;,",") |
2 | =A1.sort(userName,date) | =B1.sort(userName,date) |
3 | =new=[B2,A2].merge@d(userName,date) | |
4 | =delete=[A2,B2].merge@d(userName,date) | |
5 | =diff=[B2,A2].merge@d(userName,date,saleValue,saleCount) | |
6 | =update=[A5,new].merge@d(userName,date) | return update |
A1,B1:以逗號為分隔符讀入文件。
A2,B2:將數(shù)據(jù)按照關(guān)鍵字排序。因為后面使用merge函數(shù)要求數(shù)據(jù)有序。
A3:函數(shù)merge可進(jìn)行多數(shù)據(jù)集歸并,使用選項@d表示歸并時找出差集。類似地還有并集選項@u,交集選項@i。新增記錄實際上就是較新的數(shù)據(jù)和較舊數(shù)據(jù)按關(guān)鍵字的差集,計算結(jié)果如下:
A4:同樣的,較舊數(shù)據(jù)和較新數(shù)據(jù)按關(guān)鍵字的差集就是刪除的記錄,計算結(jié)果如下:
A5:將關(guān)鍵字作為普通字段計算差集,找到修改過的所有記錄。計算結(jié)果如下:
A6:要計算更新的記錄,把A5作為中間計算結(jié)果,計算A5和“新增”記錄之間的差集。計算結(jié)果如下:
B6:將A6返回給JAVA或報表工具。
上述腳本完成了所有的數(shù)據(jù)處理工作,接下來還可以通過JDBC將集算器腳本集成在JAVA里。JAVA代碼如下:
//建立esProc jdbc連接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//調(diào)用esProc,其中test是腳本文件名,可接收參數(shù)
st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");????????????? ????????
com.esproc.jdbc.InternalCStatement st = (com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");
st.execute();//執(zhí)行esProc存儲過程
ResultSet set = st.getResultSet();//獲得計算結(jié)果
而如果要將多個數(shù)據(jù)集返回給JAVA,可以將B6的代碼改為:return new,delete,update。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁題目:比較csv文件中數(shù)據(jù)差異-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://www.muchs.cn/article22/pdscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、電子商務(wù)、Google、定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容