PHPackages                             redcatphp/csv-tools - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. redcatphp/csv-tools

AbandonedArchivedLibrary

redcatphp/csv-tools
===================

v1.0.1(9y ago)1105MITPHP

Since Feb 27Pushed 7y ago1 watchersCompare

[ Source](https://github.com/redcatphp/csv-tools)[ Packagist](https://packagist.org/packages/redcatphp/csv-tools)[ RSS](/packages/redcatphp-csv-tools/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (3)Used By (0)

**No longer actively maintained. I work now with NodeJS and I recommand you to take a look at [PapaParse](https://github.com/mholt/PapaParse)**

\#CSV Tools

\###taken from DelimiterFinder with composer, namespace and autoload support

A little utility class that reads a .csv or .dat (or whatever) file and tries to guess the delimiter

\##Usage

\###Create an instance

Include the file and create a new instance in the usual way; the constructor takes a filepath as a required argument:

```
require_once dirname(__FILE__) . '/DelimiterFinder.php';

try {
    $finder = new DelimiterFinder('path/to/data.csv');
} catch (InvalidArgumentException $e) {
    // file does not exist :o
} catch (RuntimeException $e) {
    // file is not readable :(
}

```

The object will try to open a file handle on the filepath provided. If the file is unreadable or non-existent exceptions will be thrown.

\###Find

Assuming all went smoothly to this point, it's time to try to guess the delimiter.

The class searches for a likely delimiter from the following list of usual suspects:

- comma (`,`), tab (`\t`) or semicolon (`;`)

Just call the find method:

```
$delimiter = $finder->find();

```

If successful, `find()` stores and returns the matched delimiter. Subsequent calls to do not search the document again; they just return the stored match.

\###If at first you don't succeed...

If a match is not successful, the `find()` method returns `false`. Subsequent calls to `find()` will search the document again. You can add any number of custom delimiters to search, which makes repeat searches a little more useful ;)

```
$finder->addDelimiter('|');
$delimiter = $finder->find(); // pipe-delimited file? success!

```

###  Health Score

29

—

LowBetter than 59% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

3364d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/085e64547ac1b32cc49f4f6ba5950c35f593f79d8523e2379869ab512eb8a725?d=identicon)[surikat](/maintainers/surikat)

---

Top Contributors

[![devthejo](https://avatars.githubusercontent.com/u/6781828?v=4)](https://github.com/devthejo "devthejo (3 commits)")

### Embed Badge

![Health badge](/badges/redcatphp-csv-tools/health.svg)

```
[![Health](https://phpackages.com/badges/redcatphp-csv-tools/health.svg)](https://phpackages.com/packages/redcatphp-csv-tools)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
