zoukankan      html  css  js  c++  java
  • php平均拆分大文件为N个小文件

    用PHP程序拆分大文件为N个小文件

    /*
    假设有文件data.log , 内容如下,行数很多,假设有上亿条数据,文件大小大概在800M左右
    92735290
    80334472
    49114074
    87184448
    56073913
    49869384
    41544494
    32725219
    88143005
    41025390
    ...
    50674133
    88480834
    73630065
    84739990
    28690490
    82888793
    32222595
    76950683
    62781066
    69386596
    
    需求是把这个文件平均拆分为N个小文件
    0.log
    92735290
    80334472
    49114074
    ...
    87184448
    56073913
    49869384
    41544494
    
    1.log
    32725219
    88143005
    41025390
    ...
    50674133
    88480834
    73630065
    84739990
    
    2.log
    28690490
    82888793
    32222595
    ...
    76950683
    62781066
    69386596
    */
    
    //废话不多说贴代码
    set_time_limit(500);
    $file = 'data.log';
    
    //制造1000W的行数据
    $handle = fopen($file , 'wb+');
    for ($i=0;$i<10000000;$i++)
    {
        fwrite($handle , rand(10000000,99999999)."
    ");
    }
    fclose($handle);
    exit();
    
    //拆分成小文件
    $sub_file_count = 100;                                   //要拆分的文件个数
    $sub_file_len   = ceil(filesize($file)/$sub_file_count); //每个子文件的大小
    $handle         = fopen($file, "rb");                    //打开文件资源
    rewind($handle);                                         //文件位置指针设为文件流的开头
    $last_n_len = 0;
    for ($i=0;$i<$sub_file_count;$i++)
    {
        $content        = fread($handle , $sub_file_len + $last_n_len);
        $last_n         = strrchr($content , "
    ");   //从最后一个
    开始一直到末尾的字符串
        $last_n_len     = strlen($last_n);            //从最后一个
    开始一直到末尾的字符串的长度
        $trim_n_content = substr($content , 0 , strlen($content) - $last_n_len);
        //写文件
        fwrite(fopen($i.".log", "wb") , $trim_n_content);
        fseek($handle , ftell($handle) - $last_n_len + 1);//设置文件指针
    }
    exit();
    

      

    ——在青春的路上,我们与你携手共进!
  • 相关阅读:
    Vijos训练计划 1304回文数
    18.03.03 位运算作业三则
    18.03.01 codevs1014 装箱问题
    Wikioi 1020 孪生蜘蛛 Label:Floyd最短路
    TYVJ P1004 滑雪 Label:记忆化搜索
    洛谷 P1118 数字三角形游戏 Label:dfs
    TYVJ P1015 公路乘车 &&洛谷 P1192 台阶问题 Label:dp
    洛谷 P1147 连续自然数和 Label:等差数列
    洛谷 P1019 单词接龙 Label:dfs
    洛谷 P1025 数的划分 Label:dp
  • 原文地址:https://www.cnblogs.com/sajanray/p/4424762.html
Copyright © 2011-2022 走看看