adinan-cenci / file-editor
一个用于读写文件的库。
v1.1.1
2023-07-22 14:29 UTC
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-22 17:07:01 UTC
README
一个用于编辑和读取文件的库。
这曾经是我 json-lines 库的一部分,但为了组织上的原因,我决定将其移动到一个独立的仓库。
如何使用它
实例化
use AdinanCenci\FileEditor\File; $file = new File('my-file.txt');
迭代
foreach ($file->lines as $lineN => $line) { echo "$lineN: $line <br>"; }
向文件末尾添加一行
$file->addLine('foo-bar');
向文件中间添加一行
$lineN = 5; $line = 'foo-bar'; $file->addLine($line, $lineN);
如果文件行数少于 $line
,则空行将填充空白。
向文件末尾添加多行
$lines = [ 'foo: bar', 'bar: foo', ]; $file->addLines($lines);
向文件中间添加多行
$lines = [ 2 => 'foo: bar', 6 => 'bar: foo', ]; $file->addLines($lines, false);
替换现有行
$lineN = 10; $line = 'foo-bar'; $file->setLine($lineN, $line);
::addLine()
和 ::setLine()
的区别在于 ::setLine()
将覆盖 $line
位置上已经存在的任何内容。
设置多行
$lines = [ 0 => 'foo: bar', 5 => 'bar: foo', ]; $file->setLines($lines);
检索行
$lineN = 10; $line = $file->getLine($lineN);
如果行不存在,则返回 null
。
检索多对象
$linesN = [0, 1, 2]; $lines = $file->getLines($linesN);
删除行
$lineN = 10; $file->deleteLine($lineN);
删除多行
$linesN = [0, 1, 2]; $file->deleteLines($linesN);
搜索
该库还提供了一种查询文件的方法。
实例化一个新的 Search
对象,提供条件并调用 ::find()
方法,它将返回一个数组,包含匹配行,并按文件中的行号索引。
$search = $file->search(); $search->condition('content', 'value to compare', 'operator'); $results = $search->find();
等于操作符
$search->condition('lineNumber', 10, '='); // Will match the 11th line in the file.
in 操作符
$search->condition('content', ['Iliad', ' Odyssey'], 'IN'); // Will match lines that match either "Iliad" or "Odyssey" // ( case insensitive ).
like 操作符
$search->condition('content', 'foo', 'LIKE'); // Will match lines that contains the word "foo" // e.g: "foo", "foo bar", "foofighters" etc ( case insensitive ). $search->condition('content', ['foo', 'bar'], 'LIKE'); // It also accept arrays. This will match match // "fool", "barrier", "barista" etc.
正则表达式操作符
$search->condition('content', '#\d{2}\/\d{2}\/\d{4}#', 'REGEX'); // Will match lines against a regex expression.
数字比较操作符
它还支持 "小于"、"大于"、"小于等于"、"大于等于" 和 "介于"。
$search ->condition('lineNumber', 2022, '<') ->condition('lineNumber', 1990, '>') ->condition('lineNumber', 60, '<=') ->condition('lineNumber', 18, '>=') ->condition('length', [10, 50], 'BETWEEN');
否定操作符
您也可以否定操作符。
$search ->condition('content', 'Iliad', '!=') // Different to ( case insensitive ). ->condition('content', ['Iliad', ' Odyssey'], 'NOT IN') // case insensitive. ->condition('length', [10, 50], 'NOT BETWEEN') ->condition('content', ['foo', 'bar'], 'UNLIKE');
多个条件
您可以将多个条件添加到搜索中。默认情况下,必须满足所有条件。
$search = $file->search(); $search ->condition('content', 'Iron Maiden', '=') ->condition('lineNumber', 2000, '<'); $results = $search->find(); // Will match entries for Iron Maiden, before the line 2000.
但您可以使其仅需要满足一个条件。
$search = $file->search('OR'); $search ->condition('content', 'Blind Guardian', '=') ->condition('content', 'Demons & Wizards', '='); $results = $search->find(); // Will match entries for both Blind Guardian and Demons & Wizards.
条件组
您还可以分组条件以创建复杂的查询。
$search = $file->search('OR'); $search->andConditionGroup() ->condition('content', 'Angra', '=') ->condition('lineNumber', 2010, '<'); $search->andConditionGroup() ->condition('content', 'Almah', '=') ->condition('lineNumber', 2010, '>'); $results = $search->find(); // Will match entries for Angra from before line 2010 OR // entries for Almah from after that
许可证
MIT
如何安装它
使用 composer。
composer require adinan-cenci/file-editor