2010-04-27 70 views
2

large text file viewer work怎麼樣?大型文本文件查看器如何工作?如何構建一個大型的文本閱讀器

我假設:

  • 線程是用來處理文件
  • 文本框更新逐行
  • 有效的內存處理用於

是這些假設正確?如果有人開發自己的產品,什麼是必須要做的和不該做的事情?

我期待用一個DataGrid,而不是一個TextBox

我熟悉C++和Python實現一個。我可能會使用Qt/PyQt的

編輯

的文件,我通常在1.5到2 GB。我正在查看編輯和查看這些文件

+1

你需要編輯或只讀?當你寫大文本時,你的意思是多大(MB?GB?)? – 2010-04-27 12:06:48

+0

@DavidRodríguez - dribeas 1 - 2 GB – dassouki 2010-04-27 12:09:22

+0

您是否考慮過使用數據庫來保存數據(因爲它顯然是以網格形式存在)? – tgray 2010-04-27 14:10:50

回答

6

我認爲這個技巧並不是將整個文件加載到內存中,而是使用seek等來加載被查看的部分(可能前後加上一個塊處理一些滾動)。也許甚至使用內存映射緩衝區,儘管我對這些緩衝區沒有經驗。

請認識到修改大文件(快速)與僅查看它不同。您可能需要將圍繞編輯的千兆字節數據複製到新文件,該文件可能會很慢。

4

在Kernighan和Plaugher的經典它們覆蓋的版本版的開發和設計選擇(1),並注意

書「Pascal的軟件工具」,「警告(古董):edit是大 程序(不包括 translitfindchange貢獻;在 950線,它比在這本書中別的更大的百分之五十 「

。 10

而且他們(字面上)甚至沒有使用字符串類型。由於他們注意到要編輯的文件可能存在於tape中,該文件不支持中間的任意寫入,所以他們必須在內存中保留行位置的索引並使用臨時文件來存儲更改,刪除和添加,合併整個一起在一個「保存」命令。和你一樣,他們擔心內存會限制其可編輯文件的大小。

這種方法的總體結構保存在GNU ed project,特別是在buffer.c

+0

我知道你可以覆蓋文件中的數據(在磁盤上),但插入文件也是不支持的磁盤上我認爲。 – extraneon 2010-04-29 17:27:10

+0

它只有歷史趣味,但是因爲你問了......你是正確的,大多數磁盤文件系統會讓你*覆蓋*文件中間的東西,但不能插入。由於某些磁帶編碼的機制,在中間寫入不會覆蓋那裏的數據,因此它將整個文件寫入磁盤。 – msw 2010-04-29 18:04:02