php按行处理文件

* javascript中不会 引入模板文件

 所以用js字符串拼接

* LineProcessor.php

<?php

class LineProcessor {
    /** @var \SplFileObject */
    private $file;

    /** @var int */
    private $linum;

    /** @var  callable */
    protected $handler;

    public function __construct(string $path) {
        $this->file = new \SplFileObject($path, 'r');
        $this->linum = 0;
    }

    /**
     * 试着读取$limit行, 对每一行执行$callback
     * @param callable $callback
     * @param int $limit default unlimited
     * @return int 实际读取的行数
     */
    public function forEach(callable $callback, int $limit = 0) {
        // unlimited
        if (0===$limit) {
            while ($this->file->valid()) {
                $line = $this->file->fgets();
                call_user_func($callback, $line, $this->linum);
                $this->linum++;
            }
            return 0;
        }
        for ($i = 0; $i < $limit && $this->file->valid(); $this->linum++) {
            $line = $this->file->fgets();
            if (!empty($line)) {
                call_user_func($callback, $line, $i);
                $i++;
            }   
        }
        return $i;
    }

    public function setHandler(callable $cb) {
        if (!$cb) {
            $cb = function($cur, $i) {
                printf("%d %s\n", $i, $cur);
            };
        }
        $this->handler = $cb;
    }

    public function run() {
        $this->forEach($this->handler);
    }

}

function __autoload($className) {
    include $className.'.php';
}

$p = new \LineProcessor('./ruleform.html');

$p->setHandler(function($cur) {
    $cur = trim($cur);
    $len = strlen($cur);
    if ($len === 0) {
        return 0;
    }
    $cur = "\"" . addslashes($cur) . "\"+";
    echo $cur.PHP_EOL;
    return $len;
});

$p->run();

猜你喜欢

转载自blog.csdn.net/fareast_mzh/article/details/83044686
今日推荐