tii/csv-state-parser
Composer 安装命令:
composer require tii/csv-state-parser
包简介
Parses CSV files with a simple finite-state machine.
README 文档
README
CSV State Parser
Parses CSV files with a simple finite-state machine.
Table of Contents
Installation
Installation is simple.
Just run composer require tii/csv-state-parser
Usage
Create a Parser class that extends \Tii\CsvStateParser\CsvStateParser and implement the stateStart and result
methods. See below for a full example.
Every row gets passed into the current actives stateMethod (stateStart in the beginning).
You can change the state from the next row on by calling $this->state($nextState) and pass a String backed enum or a
value that can be cast to string. The next row will get passed to the corresponding stateMethod. I.e. if you call
$this->state('fooBar') the next row will get passed to stateFooBar(array $row).
If you need to convert every field in the CSV file beforehand you can overwrite the
protected function mapValue(string $value): string method. This is i.e.
useful for encoding conversions.
There are a few additional helpers that help you achieve stuff:
| method | description |
|---|---|
$this->done(); |
Tell the parser to quit early. |
$this->skip(int $count) |
Tell the parser to skip $count lines before calling the stateMethod again. |
You are responsible for compiling the data that the parser should return at the end yourself. This data should be
returned by the
result() method.
Here is a full example:
/** * @extends \Tii\CsvStateParser\CsvStateParser<array<int, int>> */ class SumParser extends \Tii\CsvStateParser\CsvStateParser { protected array $sums = []; protected function result(): array { return $this->sums; } protected function stateStart(array $row): void { if ($row[0] === 'START') { $this->state('list'); } } protected function stateList(array $row): void { if ($row[0] === 'END') { $this->done(); return; } $this->items[] = array_reduce($row, fn($sum, $number) => $sum + $number, 0); } }
You can use your parser by instantiating it, and calling the parse(string $filename) method.
If you need to adjust the separator, enclosure and escape char you can pass those to the constructor.
⚠️ Beware! In contrast to PHPs fgetcsv function this package uses ';' as the default separator character for CSV files.
$parser = new SumParser(separator: ','); $list = $parser->parse('filename.csv');
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Top contributors:
License
Distributed under the MIT License. See LICENSE for more information.
Contact
Tii - @Tii - mail@tii.one
Project Link: https://github.com/TiiFuchs/csv-state-parser
tii/csv-state-parser 适用场景与选型建议
tii/csv-state-parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 101 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 09 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 tii/csv-state-parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tii/csv-state-parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 101
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-09-07