映射平面文本文件

时间:2011-10-10 07:55:10

标签: php database text flat-file

在文本文件中,每行末尾的\ n检测到行。为此,需要读取整个文件,这对于大文件(例如2GB)来说是个大问题。我正在寻找一种方法来读取单行而不遍历整个文件(虽然我知道它应该是一个复杂的过程)。

  1. 我知道的第一种方法是使用fseek()和offset;但这不实际。
  2. 创建键/值的平面文件;但我不确定是否有办法避免将整个加载到RAM中(它应该像在php中读取数组一样)。
  3. 或者,我们可以在每行的开头写一些数字来读取。我的意思是,是否可以通过跳过行内容来读取行开头的第一个数字(转到下一行)。

    768| line content is here
    769| another line
    770| something
    
  4. 如果只读取第一个数字,那么应该读取的总数据对于大文件来说并不多。

3 个答案:

答案 0 :(得分:1)

您是否需要阅读可以在行号上编入索引的特定行?如果是这样,只需进行二分查找。在文件中间读取(比方说)200个字符以找出行号。然后在两半中重复,直到你到达正确的位置。

答案 1 :(得分:0)

我认为没有简单的方法可以做你想做的事。记录长度可变,不能提前确定长度,对吗?

如果文件始终相同(或者至少不经常修改),我会把它放到数据库中,或至少创建索引文件(记录号:偏移量)并使用该fseek()

答案 2 :(得分:0)

或者,您可以首先为文本文件建立索引,然后继续执行日常操作,根据索引文件选择单个文件行。您可以找到如何为文本文件herehere编制索引。 为文本文件建立索引与为CSV或可变记录文件建立索引没有什么不同。