fiedsch / datamanagement
a library with helpers for managing data that is read from text files
Installs: 169
Dependents: 1
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 3
pkg:composer/fiedsch/datamanagement
Requires
- php: ^8.1
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
- league/csv: ^9.27
- pimple/pimple: ~3.0
Requires (Dev)
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^v6.4
This package is auto-updated.
Last update: 2025-11-05 14:49:51 UTC
README
PHP classes and helpers for managing data read from text files
Data\File\Readerread text filesData\File\CsvReaderread CSV filesData\File\FixedWidthReaderreads text files that contain data in fixed width columnsData\File\Helperhelper functions likeSC()that converts from spreadsheet column name to index of array generated by (e.g.)CsvFileReader->getLine()
Examples
Work on CSV data
<?php require __DIR__ . '/vendor/autoload.php'; use Fiedsch\Data\File\CsvReader; try { $reader = new CsvReader("testdata.csv", ";"); // Read and handle all lines containing data. while (($line = $reader->getLine()) !== null) { // ignore empty lines (i.e. lines containing no data) if (!$reader->isEmpty($line)) { print_r($line); } } // $reader->close(); // not needed as it will be automatically called when there are no more lines } catch (Exception $e) { print $e->getMessage() . "\n"; }
Features
As of v0.3.2 the typical boilerplate "open file, read every non-empty line, close file"
can be written in a fancier way. Use the optional parameter to getLine():
<?php while (($line = $reader->getLine(Reader::SKIP_EMPTY_LINES)) !== null) { print_r($line); }
Data augmentation
<?php require __DIR__ . '/vendor/autoload.php'; use Fiedsch\Data\File\CsvReader; use Fiedsch\Data\Augmentation\Augmentor; use Fiedsch\Data\Augmentation\Provider\TokenServiceProvider; use Fiedsch\Data\File\CsvWriter; try { $augmentor = new Augmentor(); $augmentor->register(new TokenServiceProvider()); $augmentor->addRule('token', function (Augmentor $augmentor, $data) { return [ 'token' => $augmentor['token']->getUniqueToken() ]; }); $reader = new CsvReader("testdata.csv", ";"); $writer = new CsvWriter("testdata.augmented.txt", "\t"); $header_written = false; while (($line = $reader->getLine(Reader::SKIP_EMPTY_LINES)) !== null) { $result = $augmentor->augment($line); if (!$header_written) { $writer->printLine(array_merge(['input_line'], array_keys($result), $reader->getHeader())); $header_written = true; } $writer->printLine(array_merge([$reader->getLineNumber()], $result, $line)); } $writer->close(); } catch (Exception $e) { print $e->getMessage() . "\n"; }
Creating Tokens
Method one: let the TokenCreator make sure, we have unique tokens:
<?php require __DIR__ . '/vendor/autoload.php'; use Fiedsch\Data\Utility\TokenCreator; use Fiedsch\Data\File\Writer; $creator = new TokenCreator(10, TokenCreator::UPPER); $output = new Writer('mytokens.txt'); $numTokens = 1000; while ($numTokens-- > 0) { $token = $creator->getUniqueToken(); $output->printLine($token); } $output->close();
Method two: generate tokens first and then check if they are unique. This might be faster and less resource consuming for large amounts of tokens:
// same as above, exept // $token = $creator->getUniqueToken(); // becomes $token = $creator->cretateToken();
Check that the generated tokens are unique
echo " both lines show the same numbers, there were no duplicate tokens" wc -l mytokens.csv sort mytokens.csv | uniq | wc -l