miquido / csv-file-reader
CSV 文件读取库
v1.0.0
2018-10-05 10:09 UTC
Requires
- php: ^7.1.3
- miquido/observable: ^1.0
- webmozart/assert: ^1.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpstan/phpstan: ^0.10.3
- phpstan/phpstan-phpunit: ^0.10.0
- phpunit/phpunit: ^7.0
This package is not auto-updated.
Last update: 2024-09-15 05:49:47 UTC
README
CSV 文件读取器
安装
使用 Composer 安装此包
composer require miquido/csv-file-reader
代码示例
简单读取 CSV 文件示例
<?php use Miquido\CsvFileReader\CsvFile; use Miquido\CsvFileReader\Line\CsvLineInterface; // open a file $csv = new CsvFile('./examples/users.csv'); $count = $csv->countLines(); // 101 // don't worry about memory, it reads a file line-by-line foreach ($csv->readLines() as $line) { /** @var CsvLineInterface $line */ $line->getLineNumber(); // 2 ... 101 $line->getData(); // ['id' => '1', 'name' => 'Miriam', 'surname' => 'Mccoy', 'age' => '79'] ... }
将文件作为流处理
Miquido\CsvFileReader\CsvFileReader 类使用 miquido/observable 库进行数据处理。
<?php use Miquido\CsvFileReader\CsvFile; use Miquido\CsvFileReader\CsvFileReader; use Miquido\CsvFileReader\Line\CsvLineInterface; $reader = new CsvFileReader(new CsvFile('./examples/users.csv')); $reader->lines()->subscribe(function (CsvLineInterface $line) { // do something with a line $line->getLineNumber(); // 2 ... 101 $line->getData(); // ['id' => '1', 'name' => 'Miriam', 'surname' => 'Mccoy', 'age' => '79'] ... }); $reader->loop(); // start reading a file
使用数据转换器和错误处理器
请检查 miquido/data-structure 库以获取以下示例中使用的类的更多详细信息。
<?php use Miquido\CsvFileReader\CsvFile; use Miquido\CsvFileReader\CsvFileReader; use Miquido\CsvFileReader\Line\CsvLineInterface; use Miquido\DataStructure\Map\MapInterface; use Miquido\DataStructure\Map\Map; // change data to Map object $transformer = function (array $data, int $line): MapInterface { return new Map($data); }; $reader = new CsvFileReader(new CsvFile('./examples/users.csv'), $transformer); $reader->lines()->subscribe(function (CsvLineInterface $line): void { $line->getData(); // getData() now returns Map() object }); $reader->loop(); // start reading a file
如果转换器抛出错误,它将出现在 $reader->errors() 流中
<?php use Miquido\CsvFileReader\CsvFile; use Miquido\CsvFileReader\CsvFileReader; use Miquido\CsvFileReader\Exception\InvalidCsvLineException; // check user's age $transformer = function (array $data, int $line): array { $age = (int) $data['age']; if ($age < 18) { throw new \Exception('Invalid age'); } return $data; }; $reader = new CsvFileReader(new CsvFile('./examples/users.csv'), $transformer); $reader->data()->subscribe(function (array $lineData): void { // do something with data }); $reader->errors()->subscribe(function (InvalidCsvLineException $e): void { // do something with an error $e->getMessage(); $e->getCsvLine(); }); $reader->loop(); // start reading a file
批量处理
简单地使用 Miquido\Observable\Operator
<?php use Miquido\CsvFileReader\CsvFile; use Miquido\CsvFileReader\CsvFileReader; use Miquido\Observable\Operator; $batchSize = 10; $reader = new CsvFileReader(new CsvFile('./examples/users.csv')); $reader->lines()->pipe(new Operator\BufferCount($batchSize))->subscribe(function (array $lines): void { // do something with 10 lines }); $reader->loop(); // start reading a file
查看 miquido/observable 库以获取更多操作符。
贡献
欢迎提交拉取请求、错误修复和问题报告。在提出更改之前,请通过创建问题来讨论您的更改。