Search by

dmt-software / file-stream

proggeler

Import and export large datasets with a low memory footprint.

Package info

github.com/dmt-software/file-stream

pkg:composer/dmt-software/file-stream

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 1

v1.0.0-beta 2026-09-16 08:36 UTC

This package is auto-updated.

Last update: 2026-09-16 09:19:20 UTC


README

Streaming readers and writers for CSV, JSON and XML.

Installation

composer require dmt-software/file-stream

Reading

Read structured data as objects.

use DMT\FileStream\Config\JsonReaderConfig;
use DMT\FileStream\Reader\JsonReader;
use DMT\FileStream\Stream\JsonReaderStream;
use DMT\FileStream\Structured\Path\DotSeparatedPath;

$reader = new JsonReader(
    new JsonReaderStream(fopen('people.json', 'r')),
    new JsonReaderConfig(
        path: new DotSeparatedPath('.people')
    )
);

foreach ($reader->getResults() as $person) {
    echo $person->firstName;
}

Available readers:

CsvReader
JsonReader
XmlReader

Filtering

Reader results can be filtered and chunked with ReadStatement.

use DMT\FileStream\ReadStatement;

$results = (new ReadStatement($reader))
    ->where('object.age >= 18')
    ->limit(
        offset: 10,
        limit: 20
    )
    ->execute();

Offset and limit are applied after filtering.

Writing

Serialize objects directly to a stream.

use ArrayObject;
use DMT\FileStream\Config\CsvWriterConfig;
use DMT\FileStream\Record\Mapping\Csv\PredefinedNamedColumnMapper;
use DMT\FileStream\Stream\ResourceWriterStream;
use DMT\FileStream\Writer\CsvWriter;

$writer = new CsvWriter(
    new ResourceWriterStream(fopen('people.csv', 'w')),
    new CsvWriterConfig(
        columnMapper: new PredefinedNamedColumnMapper([
            'firstName',
            'lastName',
            'age',
        ])
    )
);

$writer->write([
    new ArrayObject([
        'firstName' => 'John',
        'lastName' => 'Doe',
        'age' => '42',
    ]),
]);

Available writers:

CsvWriter
JsonWriter
XmlWriter

Writers flush and close their output stream when writing completes.