这个问题,我个人认为只能从你的文件格式上做手脚,
将你的文件格式化,如:
一行固定多上字符,不够的补空格,超出的删除,这样才可以使用fseek准确的定位.

解决方案 »

  1.   

    把文件中你要读出的部分用特殊符号来分开.
    如一个文件内容为:
    His name is Jackson.
    你只想读出这个文件中的姓名,而且假如在文件当中很难确定它的位置,
    这时你在写文件的时候用一种特殊的格式,比如:
    His name is |Jackson| (其它的特殊字符都可以)
    这样判断这个字符的起始位置,然后fseek定位到这个位置,
    再得到终止位置,得到长度,最后用fread读出来.
      

  2.   

    使用类似索引文件的方法。
    设有数据文件data.txt,其内容为
    1111
    22222
    33
    44444444
    555
    66666666我们可以给他作一个索引文件data.ind,方法如下:
    $fp = fopen("data.txt","r");
    $ind = fopen("data.ind","w");
    do {
      $n = ftell($ind);  // 保存独立行,行首偏移量
      fputs($ind,sprintf("%10d",$n); // 假定数据文件大小<10000000000字节
    }while($buffer=fgets($fp,4096)); // 假定独立行长度<=4096字节
    fclose($fp);
    fclose($ind);
    // 至此,索引文件创建完毕根据索引定位数据$h = 4; // 假定需要读取第4行内容
    $ind = fopen("data.ind","r");
    fseek($ind,($h-1)*10);
    $n = fread($ind,10);
    $fp = fopen("data.txt","r");
    fseek($fp,$n);
    $buf = fgets($fp,4096);
    // 此时$buf中的内容即为文件data.txt第4行的内容
    // 当数据文件较大时,这是非常高效的
      

  3.   

    对于楼主的具体应用fseek函数是不起作用的,你需要的是串的定位。
    只要你知道特征串就行了。