zoukankan      html  css  js  c++  java
  • # Csv数据导入导出

    Csv数据导入导出

    标签(空格分隔): php

    代码

    public function customerCsvHandler()
    {
        print("开始处理..." . PHP_EOL);
        $time = time();
        $map = [];
        $descKey = 0;
        ini_set('memory_limit', '1024M');
        $handle = fopen("./Upload/客源.csv", 'rb');
        if ($handle === false) {
            exit("文件打开失败" . PHP_EOL);
        }
        while (feof($handle) === false) {
            $value =  fgetcsv($handle);
            $value = eval('return ' . iconv('gbk', 'utf-8', var_export($value, true)) . ';');
            if (trim($value[0]) == "类型") {
                $descKey = array_search("备注", $value);
                $map[] = $value;
            } elseif (trim($value[0]) == "求购" || trim($value[0]) == "求租" ) {
                $map[] = $value;
            } else {
                $end = array_pop($map);
                $end[$descKey] .= implode(";", $value);
                $map[] = $end;
            }
            unset($value);
        }
        fclose($handle);
        print("数据处理成功 开始导出..." . PHP_EOL);
        $header = $map[0];
        unset($map[0]);
        $this->writeCsv(array_values($map), $header, "./Upload/客源_new.csv");
        print("导出成功: " . "./Upload/客源_new.csv"  . PHP_EOL);
        print("执行时间/s: ". (time() - $time) . PHP_EOL);
    }
    
    
    /**
     * 房源处理
     * @command php cli.php Crontab/CsvDataHandler/houseCsvHandler
     */
    public function houseCsvHandler()
    {
        print("开始处理..." . PHP_EOL);
        $time = time();
        $map = [];
        $descKey = 0;
        ini_set('memory_limit', '1024M');
        $handle = fopen("./Upload/房源.csv", 'rb');
        if ($handle === false) {
            exit("文件打开失败" . PHP_EOL);
        }
        while (feof($handle) === false) {
            $value =  fgetcsv($handle);
            $value = eval('return ' . iconv('gbk', 'utf-8', var_export($value, true)) . ';');
            if (trim($value[0]) == "类型") {
                $descKey = array_search("备注", $value);
                $map[] = $value;
            } elseif (trim($value[0]) == "出租" || trim($value[0]) == "出售" ) {
                $map[] = $value;
            } else {
                $end = array_pop($map);
                $end[$descKey] .= implode(";", $value);
                $map[] = $end;
            }
            unset($value);
        }
        fclose($handle);
        print("数据处理成功:开始导出数据" . PHP_EOL);
        $header = $map[0];
        unset($map[0]);
        $this->writeCsv(array_values($map), $header, "./Upload/房源_new.csv");
        print("导出成功: " . "./Upload/房源_new.csv"  . PHP_EOL);
        print("执行时间/s: ". (time() - $time) . PHP_EOL);
    
    }
    
    public function writeCsv(&$data, $header, $fileName)
    {
        $fp = fopen($fileName, 'w');
        var_dump($fp);
        foreach ($header as $key => $value) {
            $header[$key] = iconv('utf-8', 'gbk', $value);
        }
        fputcsv($fp, $header);
        $num = 0;
        $limit = 100000;
        $count = count($data);
        for ($i = 0; $i < $count; $i++) {
            $num++;
            if ($limit == $num) {
                ob_flush();
                flush();
                $num = 0;
            }
            $row = $data[$i];
            foreach ($row as $key => $value) {
                $row[$key] = iconv('utf-8', 'gbk', $value);
            }
            fputcsv($fp, $row);
        }
    }
    
    
    public function test()
    {
        $handle = fopen("./Upload/房源.csv", 'rb');
        while (feof($handle) === false) {
            yield fgetcsv($handle);
        }
        fclose($handle);
    }
  • 相关阅读:
    [BOST] 博赞有机的学习技巧
    [BOST] 你的大脑比你想象的更优秀
    Markdown学习笔记
    nodejs原生态模块,写个聊天室
    【2】自定义WindowsForm分页控件使用【共两篇】
    【1】自定义WindowsForm分页控件使用【共两篇】
    《Log4net写出适合自己的日志类》第三篇【终】【怎样让它适合你自己需求】
    《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】
    《Log4net写出适合自己的日志类》第一篇【上来就是干,先实践后理论】
    记忆留住深刻过往,博客写出平淡事迹【博客首篇】
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/12745587.html
Copyright © 2011-2022 走看看