【发布时间】:2010-08-16 00:55:58
【问题描述】:
谁能推荐一种快速的方法来根据每行的前 X 个字符对文本文件的内容进行排序? 例如,如果我在文本文件中有以下文本
Adrian Graham some more text here
John Adams some more text here
那么需要为eg插入另一条记录。
Bob Something some more text here
我需要对文件进行排序,但这是一个相当大的文件,我不想一次将其完全加载到内存中。 我所说的大是指大约 500 000 行,所以可能不是特别大。
我搜索了一下,发现http://www.codeodor.com/index.cfm/2007/5/14/Re-Sorting-really-BIG-files---the-Java-source-code/1208 我想知道是否有人可以提出任何其他方式?为了获得第二意见?
在阅读上述链接文章之前,我最初的想法是:
读取文件
将其拆分为多个文件,例如 A 到 Z
如果一行以“a”开头,则将其写入名为 A.txt 的文件中
然后对每个文件的内容进行排序(除了字母顺序之外,还不清楚如何排序)
然后在读取数据时,我知道如果我想找到以 A 开头的行,那么我打开 A.txt 插入新行时,同样适用,我只是追加到文件的末尾。稍后插入之后,当有时间时,我可以调用我的排序程序对附加了内容的文件重新排序。
我意识到这有一些缺陷,例如。不会有以特定字母开头的偶数行,因此某些文件可能比其他文件大,等等。
这又是为什么我需要第二意见来获得有关如何解决此问题的建议? 当前程序是用java编写的,但任何编程语言都可以用作实现这一目标的示例......我将移植我需要的东西。
(如果有人想知道我不是故意通过这种方式存储信息让自己头疼,我继承了一个痛苦的小程序,它将数据存储到文件而不是使用某种数据库) 提前致谢
【问题讨论】:
-
如果您愿意拆分文件,为什么不开放(至少暂时)存储在数据库中?
-
因为我有 3 个 jars、主程序、一些实用程序和处理文件存储和检索的第 3 个 jar 我只有主程序的源代码......主 jar 和util jar 与第三个 jar 交互,这意味着我只能继承和覆盖各种方法,我在程序中发现了相当多的随机读写,这些方法还没有意义,这使得它变得更加困难只需剥离文件并插入数据库。这是一个写得很糟糕的软件,很明显他们没有打算再次对其进行改进......
-
基本上,我看不到一种无需大规模重写即可简单地添加数据库的方法,而我试图避免这种方式。