问题是这样的  
有1个TXT文件里,存着一些学生姓名和成绩:
例如 张三100,李四50,王五60,....这个文件比较大,存的 数据很多,大小在7M多请问下,我想从其中随机读取几个学生的成绩,可能是在文件首,也可能是在文件尾
如果用 file_get_contents() 吧文件一下读完,再分析,这样速度好慢,而且占用内存很大请问好的办法,性能速度有很大的提高的。 

解决方案 »

  1. 先建立索引
    $fn = '文件.txt';
    $ind = "$fn.ind";$fp1 = fopen($fn, 'r');
    $fp2 = fopen($ind, 'w');
    fprintf($fp2, "%u\n", 0);
    while(! feof($fp1)) {
      $c = fgetc($fp1);
      if($c == ',') {
        fprintf($fp2, "%u\n", ftell($fp1));
      }
    }
    fclose($fp1);
    fclose($fp2);readfile($ind);
    readfile($fn);然后通过索引文件操作
    索引文件要保留,以备下次使用。
    当源文件修改后需重新生成索引文件
      

  2. 使用 fseek 就不会占用那么大内存了...
      

  3. 把txt中的内容处理一下,把成绩和分数中间加上tab,再将逗号全部替换成换行符号“\n”,然后将txt文件导入到mysql中,在mysql中随机抽取不就可以了。
      

  4. 把txt中的内容处理一下,把成绩和分数中间加上tab,再将逗号全部替换成换行符号“\n”,然后将txt文件导入到mysql中,在mysql中随机抽取不就可以了。
      

类似问题 »