二进制使用Javascript在文本文件中搜索一行

时间:2009-02-13 01:02:17

标签: javascript file-io binary-search

有没有办法在Javascript中对文本文件中的特定键进行基于磁盘的二进制搜索?文本文件太大,无法加载到内存中,但按键值排序。特别是我正在寻找一种在Javascript中模仿Perl的Search::Dict功能的方法。

例如如果我有一个文件foo.txt:

a 1
b 10
c 5
z 4

look(c,foo.txt)应该通过二进制搜索返回行“c 5”,而不是线性遍历文件。

2 个答案:

答案 0 :(得分:1)

实际上,只有在您可以识别记录开头时才能进行二进制搜索。您似乎有可变长度记录,因此,除非您创建一个行起始偏移数组,否则它将不起作用。

正如Nikhil在评论中正确指出的那样,一种方法是根据文件大小对文件进行二进制分割,然后找到从那里开始的最近的行。这仍然是相对有效的(即比顺序搜索更好)。

答案 1 :(得分:1)

我不知道Javascript,但是如果你可以做随机搜索,你可以通过寻找当前块的中点(以字节为单位)进行二进制搜索,然后前进直到你消耗了换行符,只要你“知道”你的密钥是否违反新行。

但是,有些情况下你需要向后行进,所以你可能会在知道文件缓冲的情况下进行搜索,这样后退步骤并不昂贵。

如果您不处理ASCII文件,我想这可能会有点毛躁。