同事处理数据时遇到一个问题:客户要求的文件格式是第一行是统计数据,后面换行后紧跟的是明细记录。
要保证明细记录的数量与统计数据一致就必须在写完明细之后再写入统计数据,而且数据的量在百万级,所以不太可能先读到内存再汇总后一起写入。
最后找到的解决办法如下:
$offset = 50; $fp = fopen ( "fseek.txt" , "wb" ); // 创建文件 flock ( $fp , LOCK_EX); // 锁定 fwrite( $fp , "\n" ); // 写入一空行 fseek ( $fp , $offset ); // 移动文件指针至偏移量处,相当于空出了50个字节的内存空间 // 写数据,汇总 $write_count = 0; for ( $i = 0; $i < 10; $i ++) { fwrite( $fp , "abc\n" ); $write_count ++; } fseek ( $fp , 0); // 文件指针再移到文件头 // 写入汇总记录,并用空格填充余下的内存空间 fwrite( $fp , str_pad ( "total count:" . $write_count , $offset - 1, " " , STR_PAD_RIGHT). "\n" ); flock ( $fp , LOCK_UN); // 解锁 fclose( $fp ); // 关闭文件 |
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦