我有一個正在寫入每隔幾分鐘的日誌文件。我將有一個進程在特定的目錄上進行偵聽。每小時它將從這個csv文件導入新的行到一個訪問數據庫。不幸的是,csv文件沒有每行的唯一鍵。每小時導入csv文件的內容
問題是我該如何跟蹤要導入的新行?
如何知道何時導入新行?
另一個複雜因素是,有另一個程序每天刪除一次這個csv文件,所以我不能確切地跟蹤我停止的位置。
我有一個正在寫入每隔幾分鐘的日誌文件。我將有一個進程在特定的目錄上進行偵聽。每小時它將從這個csv文件導入新的行到一個訪問數據庫。不幸的是,csv文件沒有每行的唯一鍵。每小時導入csv文件的內容
問題是我該如何跟蹤要導入的新行?
如何知道何時導入新行?
另一個複雜因素是,有另一個程序每天刪除一次這個csv文件,所以我不能確切地跟蹤我停止的位置。
日誌文件自然應該有時間戳。您可以按上次加載的日誌日期時間戳進行跟蹤。
如果您沒有日期時間或任何其他順序屬性進行跟蹤,則可以在每次加載後跟蹤文件長度。因此,在下次閱讀之前,您將當前文件流讀取器的位置設置爲前一次檢查中捕獲的文件長度的值。
[編輯]
關於您添加關於「另一個複雜」,有就是每天一次刪除該CSV文件的另一個程序的註釋:
如果日誌文件沒有唯一的鍵值,那麼您使用行號作爲鍵時會非常困難。 (使用文件流閱讀器的位置,就像@Alex Aza所建議的那樣,效率會更高,但聽起來你有點卡住,所以從行號開始可能會讓你去,然後你可以改進它。)
你說你不能使用職位,因爲該文件將在一夜之間被刪除,但你可以將其作爲特殊情況處理。如果可用的總行數(或最後一個文件位置)小於您讀取的前一個最遠位置,那麼您需要回到零。您還應該能夠使用該文件的創建時間來檢測自上次查看以來它是否已被替換。
通過它的聲音,你應該退一步 - 你實際上在記錄什麼?
必須有東西是唯一的,否則記錄插入兩次也沒關係。
回答您的問題: