用開關處理檔案合併

2021-08-28 06:51:43 字數 2273 閱讀 7603

最近合併乙個增量和全量檔案的時候用到了開關,很好用的一種處理邏輯。

應用場景:有乙個增量檔案,乙個全量檔案,按照規則將增量檔案和全量檔案進行對比後,寫入新的全量檔案。

在增量檔案中有三種資料標識,0表示此增量資料不用新增到新的全量檔案中,要在全量檔案中刪除此標識對新增到新的全量檔案中。1表示2表示此條增量資料要插入新的全量檔案中,2表示此條增量資料對應的手機號需要更新到新的全量檔案,原全量檔案的有相同手機號的不用新增新的全量檔案中。

增量資料如下:

1,13188739756,00020220,00030220,2018-09-18 00:00:00 直接加入到新的全量檔案中

2,13188739754,00020220,00030220,2018-09-18 00:00:00 刪除原全量檔案同樣手機號的資料,將此條資料擷取2,後的資料新增到新的全量檔案中

0,13188739755,00020220,00030220,2018-09-18 00:00:00 此條資料不新增到到新的全量資料檔案

全量資料:

13288739764,00030220,00020220,2017-09-18 00:00:00

13188739754,00030220,00020220,2018-09-18 00:00:00

13188739755,00020220,00030220,2018-09-18 00:00:00

最終要生成的新的全量檔案:

13288739764,00030220,00020220,2017-09-18 00:00:00

13188739754,00020220,00030220,2018-09-18 00:00:00

13188739756,00020220,00030220,2018-09-18 00:00:00

真實的全量資料有將近40萬,增量資料有5000多條,0,1,2標識的資料增量資料數量不等,可能沒有0,或沒有2,或沒有1,或者都沒有,或者都有,或者只有1條,或者有很多條。

全量和增量檔案第一行是此檔案含有的記錄數。

public

static

void

datareadwrite

(file itffullfile ,file increfile)

pw.println

(readline);}

}else

else

if(increstr.

startswith

("1,"))

else

if(increstr.

startswith

("2,"))

}}while

((itffullstr = fullbr.

readline()

)!= null)

else}}

else

else

}for

(string increstr2 : increlist2)

else

if(flag0.

equals

("add"

)&& itffullstr.

indexof

(increstr2.

substring(2

,13))

==-1)

}}}else

if(increlist0.

size()

==0)else

if(flag0.

equals

("add"

)&& itffullstr.

indexof

(increstr2.

substring(2

,13))

==-1)

}}else}if

(flag)}}

else

if(flag0.

equals

("add"))

if(flag0.

equals

("nothandle"))

}}catch

(exception e)}}

if(increlist1.

size()

!=0)}

pw.println

(readline);}

catch

(ioexception e)

finally

if(fullbr != null)

if(itffullbr != null)

}catch

(exception e)

}}

用with處理檔案

用with處理檔案 由於處理檔案時try except finally模式相當常用,所以python提供了乙個語句來抽象出相關的一些細節。對檔案使用with語句時,可以大大減少需要編寫的 量,因為有了with語句就不再需要包含乙個finally組來處理檔案的關閉,即妥善關閉乙個可能開啟的資料檔案。例...

用C,shell實現倆檔案合併

乙個檔案a中內容以行儲存,如果命名為a1,a2,a3.行,另乙個檔案b中為b1,b2,b3,b4,b5.a和b檔案內容不一定等長,使用c shell分別實現內容合併,形式為a1b1a2b2a3b3a4b4b5.解析程式環境為linux環境下gcc編譯。void file if fp2 fopen b...

用rdiff拆分合併檔案

我們的乙個方案是基於檔案做多端資料同步,見另外一篇部落格 基於檔案的資料同步方案 其中的核心是如何正確 高效地同步檔案,一開始我們使用了國產的libsync庫 libsync 基本的流程是 有檔案a和b,現在想把檔案a 變成 檔案b,先對檔案a做chunk 然後用chunk和檔案b對比,得到delt...