dgifford/text-file

提供逐行编辑文本文件的类。

v2.2 2017-02-22 10:30 UTC

This package is auto-updated.

Last update: 2024-09-14 08:25:35 UTC


README

逐行操作文本文件的类。

适用于编辑/创建通过周围的行容易区分的段落或行的文本文件。

例如,像 .htaccess 这样的配置文件,其中段落可能由注释或if语句定义。

实例化

可以通过向构造函数提供以下内容来初始化对象

  • 有效的文件路径
  • 字符串
  • 字符串(行)数组
$text = new TextFile( 'foo.txt' );

$text = new TextFile( "line 1\nline 2\nline 3\nline 4" );

$text = new TextFile( ["line 1", "line 2", "line 3", "line 4"] );

或者,通过使用 load 方法

$text = new TextFile();

$text->load( 'foo.txt' );

$text->load( "line 1\nline 2\nline 3\nline 4" );

$text->load( ["line 1", "line 2", "line 3", "line 4"] );

数组访问

该类实现了数组访问和数组迭代器,因此可以使用数组符号和 foreach 循环访问行。

$text->load( 'foo.txt' );

// Output the first line
echo $text[0];

// Iterate over each line
foreach( $text as $index => $line )
{
	...
}

编辑

可以直接使用数组访问直接编辑行。

$text->load( 'foo.txt' );

// Change the first line
echo $text[0] = 'This is the first line';

// Delete the first line
unset( $text[0] );

以下方法在编辑时提供了更多灵活性。

delete

删除所有行:$text->delete()

删除包含字符串 'bar' 的所有行:$text->delete( 'bar' )

可以通过提供两个字符串来删除行块,以标识开始和结束行。

然而,只有当部分是唯一的(开始和结束行只出现一次)并且开始行在结束行之前时,才会删除行。

例如,要删除第一个行包含 'foo' 且最后一个行包含 'bar' 的行块

$result = $text->delete( 'bar', 'foo' );

如果成功删除块,则 $result 将为 true,否则为 false

添加第三个布尔参数将使块专一,即不包含开始和结束行

$result = $text->delete( 'bar', 'foo', false ); 

replace

replace 方法的参数与 delete 的参数类似,只是替换行(块)包含在内。

$text->replace( 'foo', 'replace', 'bar');

这用行 'replace' 替换了第一个行包含 'bar' 且最后一个行包含 'foo' 的块。

同样,只有当块是唯一的并且开始行在结束行之前时,才会替换行。如果块无效,则返回 false。

false 作为第四个参数添加以替换块,但不包含开始和结束行

$text->replace( 'foo', 'replace', 'bar', false );

此方法也接受行数组作为替换

$text->replace( 'foo', ['replace', 'replace', 'replace'], 'bar', false );

find

find 返回包含搜索字符串的行的索引。它由 deletereplace 等方法内部使用。

要找到所有包含 'foo' 的行:$result = $text->find( 'foo' )

结果将是一个索引数组,如果没有找到行,则为 false。

此方法还可以通过添加第二个 false 参数来用于查找唯一的行

$result = $text->find( 'foo', false ); 

结果将是一个整数,如果没有找到行或找到多个行,则为 false

prepend

此方法将包含 'foo' 的单个行添加到文件的开始:$text->prepend( 'foo' )

将多行添加到文件的开始:$text->prepend( ['foo', 'foo', 'foo'] )

append

将包含 'foo' 的单个行添加到文件的末尾:$text->append( 'foo' )

将多行添加到文件的末尾:$text->append( ['foo', 'foo', 'foo'] )

add

此方法在指定行之前添加行。

在包含 'foo' 的行之前添加包含 'bar' 的行:$text->add( 'foo', 'bar' )

在包含 'foo' 的行之前添加多行:$text->add( 'foo', ['bar', 'bar', 'bar'] )

提取行

提取行的结果是包含提取行的新的 TextFile 对象。

与其他方法一样,要提取的行块由起始行和结束行中的字符串标识。

这将提取包含 'bar' 的行和包含 'foo' 的行之间的行,包括这两行。

$result = $text->extract( 'foo', 'bar' );

false 作为第三个参数,将排除起始行和结束行:$result = $text->extract( 'foo', 'bar', false)

省略第二个参数将提取从第一行到文件末尾的所有行,包括第一行。

$result = $text->extract( 'foo' );

输出

join 方法返回一个字符串,其中每行之间都有一个换行符。

默认情况下,使用 PHP 常量 PHP_EOL,但可以通过以下方式设置:$text->setEOL( "\n" )

要作为字符串输出文件内容:echo $text->join()

要保存文件:$text->save( 'foo.txt' )