neam / php-sie
PHP版的 https://github.com/barsoom/sie
3.3.3.1
2016-10-05 08:20 UTC
Requires
- php: >=5.6.5
- ext-iconv: *
- strscan/strscan: ~1.0.3
Requires (Dev)
- codeception/codeception: ~2.2.4
This package is not auto-updated.
Last update: 2024-09-13 22:20:29 UTC
README
SIE文件(http://sie.se/)的解析器和生成器。
PHP版的 https://github.com/barsoom/sie
当前实现需要PHP 5.6.5或更高版本。
安装
通过composer
composer require neam/php-sie
生成SIE文件
要生成SIE文档,首先需要定义一个实现了\sie\document\IDataSource或扩展了抽象类\sie\document\DataSource的类。
$mySieFileDataSource = new MySieFileDataSource($this); $sieFileDocument = $mySieFileDataSource->generateSieDocument(); $sieFileContents = $sieFileDocument->render(); file_put_contents('sie_file.se', $sieFileContents);
查看tests/unit/*Test.php文件以获取更多示例。
解析SIE文件
您可以从响应到each_line
的任何东西(如文件或字符串)中解析SIE数据。
$file_contents = file_get_contents('sie_file.se'); $parser = new \sie\Parser(); $sie_file = $parser->parseSieFileContents($file_contents); return $this->parse($data); // The company name puts sie_file.entries_with_label("fnamn").first.attributes["foretagsnamn"] // The first account number puts sie_file.entries_with_label("konto").first.attributes["kontonr"]
解析器期望文件内容使用CP437编码(SIE文件格式的官方编码)。如果您想解析UTF8字符串,请使用"parse"方法
$sie_file = $parser->parse($utf8_string);
默认情况下,解析器在遇到未知条目类型时会引发错误。使用lenient
选项来避免这种情况
$parser = new \sie\Parser(["lenient" => true]);
查看tests/integration/*Test.php文件以获取更多示例。
开发
首次设置
composer install
运行测试
vendor/bin/codecept build
vendor/bin/codecept run
测试示例输出
# vendor/bin/codecept run --debug
Codeception PHP Testing Framework v2.2.4
Powered by PHPUnit 5.4.8 by Sebastian Bergmann and contributors.
Integration Tests (8) ----------------------------------------------------------------------------------------------
Modules: \Helper\Integration
--------------------------------------------------------------------------------------------------------------------
✔ FileParserTest: Parses a file (0.07s)
✔ FileParserTest: Parses a file with unknown entries using a lenient parser (0.01s)
✔ FileParserTest: Parses a file with unknown entries using a strict parser (0.05s)
✔ Fortnox21FileParserTest: Parses sie1 se file (0.09s)
✔ Fortnox21FileParserTest: Parses sie2 se file (0.25s)
✔ Fortnox21FileParserTest: Parses sie3 se file (0.27s)
✔ Fortnox21FileParserTest: Parses sie4 se file (0.51s)
✔ Fortnox21FileParserTest: Parses sie4 si file (0.29s)
--------------------------------------------------------------------------------------------------------------------
Unit Tests (39) ----------------------------------------------------------------------------------------------------
Modules: \Helper\Unit
--------------------------------------------------------------------------------------------------------------------
✔ BuildEntryTest: Call (0.05s)
✔ BuildEntryTest: Call with an unquoted zero string (0.00s)
✔ BuildEntryTest: Call with short dimensions array (0.00s)
✔ BuildEntryTest: Call with long dimensions array (0.00s)
✔ BuildEntryTest: Call with simple attribute (0.00s)
✔ BuildEntryTest: Call with an unexpected token at start of array (0.00s)
✔ DocumentTest: Adds a header (0.02s)
✔ DocumentTest: Has accounting years (0.01s)
✔ DocumentTest: Has accounts (0.01s)
✔ DocumentTest: Has dimensions (0.01s)
✔ DocumentTest: Has objects (0.01s)
✔ DocumentTest: Has balances brought forward (0.01s)
✔ DocumentTest: Has balances carried forward (0.01s)
✔ DocumentTest: Has closing account balances (0.01s)
✔ DocumentTest: Has vouchers (0.01s)
✔ DocumentTest: Truncates really long descriptions (0.01s)
✔ DocumentTest: Ensures there are at least two lines with a zeroed single voucher line (0.01s)
✔ DocumentTest: Reads the series from the voucher with a series defined (0.01s)
✔ ParserTest: Parses sie data that includes arrays (0.00s)
✔ ParserTest: Handles leading whitespace (0.00s)
✔ RendererTest: Replaces input of the wrong encoding with questionmark (0.00s)
✔ VoucherSeriesTest: Self for | #0 (0.00s)
✔ VoucherSeriesTest: Self for | #1 (0.00s)
✔ VoucherSeriesTest: Self for | #2 (0.00s)
✔ VoucherSeriesTest: Self for | #3 (0.00s)
✔ VoucherSeriesTest: Self for | #4 (0.00s)
✔ LineParserTest: It parses lines from a sie file (0.00s)
✔ LineParserTest: Using a lenient parser it raises no error when encountering unknown entries (0.00s)
✔ LineParserTest: Using a strict parser it raises error when encountering unknown entries (0.00s)
✔ TokenizerTest: Tokenizes the given line (0.00s)
✔ TokenizerTest: Can parse metadata arrays (0.00s)
✔ TokenizerTest: Handles escaped quotes in quoted strings (0.00s)
✔ TokenizerTest: Handles escaped quotes in non quoted strings (0.00s)
✔ TokenizerTest: Handles escaped backslash in strings (0.00s)
✔ TokenizerTest: Has reasonable behavior for consecutive escape characters (0.00s)
✔ TokenizerTest: Handles tab character as field separator (0.00s)
✔ TokenizerTest: Handles unquoted zeros (0.01s)
✔ TokenizerTest: Handles transaction with dimension array (0.00s)
✔ TokenizerTest: Rejects control characters (0.00s)
--------------------------------------------------------------------------------------------------------------------
Time: 2.84 seconds, Memory: 12.00MB
OK (47 tests, 133 assertions)