idct / php-csv-writer
基于缓冲的 TextWriter 的 CsvWriter,支持 EOL。
Requires
- php: >=7.1
- ext-ctype: *
- ext-mbstring: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mikey179/vfsstream: ^1.6.8
- php-coveralls/php-coveralls: ^2.1
- php-mock/php-mock-phpunit: ^2.5
- phpunit/phpunit: ^7.5
README
基于缓冲的 TextWriter 的基本 CsvWriter(也提供)。支持内存缓冲和正确处理 EOL 设置,这是使用原生的 fputcsv 函数难以实现的。
本库的主要目的是提供一种面向对象的缓冲 CSV 文件写入方式。
安装
在您的项目中安装库的最佳方式是使用 Composer
composer require idct/php-csv-writer
当然,您仍然可以使用 using 语句手动将所有必需的文件包含到项目中,但强烈建议使用 Composer 和自动加载。
用法
创建实例
use IDCT\CsvWriter\CsvWriter; $csvWriter = new CsvWriter();
现在您需要打开或创建一个文件,为此您有两种方法可用:open 和 openWithFieldsNames。要创建一个不添加标题的新文件,请使用
$csvWriter->open('filename.csv');
要打开一个带有标题的新文件,请传递一个数组作为第二个参数
$csvWriter->openWithFieldsNames('filename.csv', ["columnA", "columnB", "columnC"]);
当将新行(添加数据)写入使用字段名称打开的 CSV 文件时,将在每次尝试中验证列数。
可以通过传递 TextWriter::FILEMODE_APPEND 作为最后一个参数来追加到现有文件。
$csvWriter->open('filename.csv', CsvWriter::FILEMODE_APPEND);
或
$csvWriter->openWithFieldsNames('filename.csv', ["columnA", "columnB", "columnC"], CsvWriter::FILEMODE_APPEND);
警告:在追加模式下,行不会被添加到 CSV 文件的第一行,它们仅在写入操作期间用于验证列数。
缓冲
默认情况下,CsvWriter 禁用缓冲,您可以通过使用方法 setBufferSize 提供缓冲区大小(以字节为单位)来启用它。请确保您理解,数据实际上只有在缓冲区填满时才会保存到文件中,因此请确保使用 close 方法关闭文件或使用 flush 方法,在您想要有意将缓冲区刷新到文件而不关闭文件时。
EOL 支持
默认情况下,PHP 的内部 fputcsv 函数使用当前平台默认的 EOL 符号。idct/php-csv-writer 支持设置不同的 EOL 符号:将 CsvWriter::EOL_WINDOWS、CsvWriter::EOL_LINUX 或 CsvWriter::EOL_MACLEGACY(Mac 今天使用 LINUX EOL,这只是为了遗留支持)传递给 setEolSymbol 方法。警告:仅使用 NEXT 行使用 EOL 符号,之前的行(已在文件或缓冲区中存在)将保持不变。
TextWriter
CsvWriter 基于 TextWriter,可用于缓冲文本写入操作。除了上述方法外,它还为 write 和 writeln 操作提供了不同的行为,分别存储文本或写入文本后跟定义的 EOL 符号。要使用它,只需创建一个实例
$textWriter = new TextWriter();
TODO / 贡献
目前的主要要求是提供更好的单元测试和文档,但如果您发现任何错误或具有潜在的功能想法,请使用 Issues 或 Pull Requests,这非常受欢迎!我将尽快回复。