Skip to content

hhpack/file

Repository files navigation

file

Latest Stable Version Build Status Dependency Status License

This package is a library for performing a simple to file operations hacklang.
Will provide a lightweight and simple api to the user.

Basic usage

Read processing of files can be realized by a simple code as follows.

Reading one line at a time.

use HHPack\File\FileLineStream;

$lineStream = FileLineStream::fromString('/path/to/text.log');

foreach ($lineStream as $line) {
	echo $line->length(), "\n"; //output length
	echo $line->value(), "\n"; //output content
};

Read the CSV file

use HHPack\File\FileLineStream;
use HHPack\File\SeparatedRecordStream;
use HHPack\File\ColumnSpecification;

$spec = new ColumnSpecification(',', '"');
$spec->addColumn(0, 'name');
$spec->addColumn(1, 'description');

$lineStream = FileLineStream::fromString(__DIR__ . '/example.csv');
$csvStream = new SeparatedRecordStream($lineStream, $spec);

foreach ($csvStream as $record) {
    echo $record->get('name'), "\n";
    echo $record->get('description'), "\n";
}

Customizing the reading of the record

Will create a parser that implements the ParseSpecification.
Then use the ParsedFileReader, and then apply the parser.

use HHPack\File\FileLineStream;
use HHPack\File\ParsedChunkStream;
use HHPack\File\ParseSpecification;

final class CustomRecordSpecification implements ParseSpecification<array<string>>
{
    public function parse(Chunk $line) : array<string>
    {
        return $line->split(',');
    }
}

$spec = new CustomRecordSpecification();
$lineStream = FileLineStream::fromString(__DIR__ . '/example.csv');
$csvStream = new ParsedChunkStream($lineStream, $spec);

foreach ($csvStream as $values) {
    echo $values[0], "\n";
    echo $values[1], "\n";
}

Run the test

You can run the test with the following command.

composer install
composer test

About

File utility library for Hack

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published