2016-02-03 26 views
-1

我已經繼承了一個應用程序,它部分處理處理許多大的分隔文件並將它們合併到數據庫中。爲了加速瀏覽這些文件的過程,我創建了一個存儲每個文件的MD5的文件。一旦文件在第二天發佈,我將當前正在解析的行的MD5值與包含從上次處理髮生時收集的MD5值的Set對象進行比較。這很好,並且將上傳到我們數據庫的時間減少了99%。解析分隔文件並創建排除某些字段的散列

除了這一個荒謬,而相當大(300MB)的文件。具有創建文件時間戳記的每一行中的第一條記錄。這是愚蠢的,我不能要求發件人改變格式。

我的問題並不一定是如何處理這個問題在一個較低的水平,雖然建議總是歡迎!

這個應用程序是在Linux環境下運行,並且我可以簡單地運行這個...

cut -f 2- -d"|" stupid_file.dat | awk '{FS="|"; print $0}' > file.dat 

...我可能是我與處理的文件快樂的方式。這基本上是我計劃要做的,如果這個線程無法解決。

我希望得到的是更高層次的答案,以不同的方式來解決這個問題。基本上,語言不可知論的東西。我目前的設置是,每個進入的文件的「定義」存儲在數據庫中,這是我們用來獲取分隔符,預期文件名,壓縮類型(如果有的話) ,等等......

一個想到我不得不希望得到球滾動的是添加一個列,讓我們稱之爲HASH_IGNORE,在我的定義表中,這將表明我想忽略哪些字段。然後我可以將它傳遞給我的散列函數,根據需要進行字符串拆分/連接,然後散列結果。像存儲「1」忽略第一個值或「2-3,5-」僅包含第一個和第四個值。然後我的函數可能看起來像:

hashValue = hashDataRow(rowData, hashIgnoreValue); 

這將是一個「可接受」的方式去了解這一點,還是我過於複雜這個問題?我想知道是否有其他人在處理分析分隔文件時遇到類似的情況。

+0

我非常努力,但是我無法在這裏找到C++或Java問題。 –

+0

@Sam - 這是一個語言不可知論類型的問題。在Java,C++等中實現的答案可能是放置這些標籤的意圖。對不起,造成任何混亂。 – rgrwatson85

回答

0

我最終使用了我的問題中提出的想法。我在數據庫中添加了一個字段,允許我調整分隔文件中的哪些字段用於創建散列。如果有人需要類似的解決方案,我願意發佈一些代碼片段。

相關問題