有没有办法在Javascript中对文本文件中的特定键进行基于磁盘的二进制搜索?文本文件太大,无法加载到内存中,但按键值排序。特别是我正在寻找一种在Javascript中模仿Perl的Search::Dict功能的方法。
例如如果我有一个文件foo.txt:
a 1
b 10
c 5
z 4
look(c,foo.txt)
应该通过二进制搜索返回行“c 5
”,而不是线性遍历文件。
答案 0 :(得分:1)
实际上,只有在您可以识别记录开头时才能进行二进制搜索。您似乎有可变长度记录,因此,除非您创建一个行起始偏移数组,否则它将不起作用。
正如Nikhil在评论中正确指出的那样,一种方法是根据文件大小对文件进行二进制分割,然后找到从那里开始的最近的行。这仍然是相对有效的(即远比顺序搜索更好)。
答案 1 :(得分:1)
我不知道Javascript,但是如果你可以做随机搜索,你可以通过寻找当前块的中点(以字节为单位)进行二进制搜索,然后前进直到你消耗了换行符,只要你“知道”你的密钥是否违反新行。
但是,有些情况下你需要向后行进,所以你可能会在知道文件缓冲的情况下进行搜索,这样后退步骤并不昂贵。
如果您不处理ASCII文件,我想这可能会有点毛躁。