Note that this function does not magically guess the CSV control from a given file, rather it returns what has been priorly set with SplFileObject::setCsvControl().
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
SplFileObject::getCsvControl — Récupère les options pour CSV
Récupère le séparateur, caractère d'échappement ainsi que le caractère utilisé pour entourer les champs lors d'une analyse CSV des données.
Cette fonction ne contient aucun paramètre.
Retourne un tableau indexé contenant le caractère utilisé pour délimiter les champs ainsi que celui utilisé pour les entourer et le caractère d'échappement.
Version | Description |
---|---|
7.4.0 | Le caractère d'espacement peut désormais être une chaîne vide. |
7.0.10 | Ajout du caractère d'échappement dans le tableau retourné. |
Exemple #1 Exemple avec SplFileObject::getCsvControl()
<?php
$file = new SplFileObject("data.txt");
print_r($file->getCsvControl());
?>
Résultat de l'exemple ci-dessus est similaire à :
Array ( [0] => , [1] => " [2] => \ )
Note that this function does not magically guess the CSV control from a given file, rather it returns what has been priorly set with SplFileObject::setCsvControl().
Seems that this function always returns the same delimiter.
<?php
file_put_contents("A;B;C;D\n0;0;0;0", "test.txt");
$file = new SplFileObject("test.txt");
var_dump($file->getCsvControl());
?>
array(2) {
[0]=>
string(1) ","
[1]=>
string(1) """
}
Given an absolute path to a CSV or any text file and a list of possible delimiters and assuming lines are up to 4096 characters long, I use
<?php
function guess_delimiter($file, $delimiters=[',',';'])
{
$h = fopen($file,'r');
$count = [];
foreach ($delimiters as $del) {
$count[$del] = 0;
while (($bufer = fgets($h, 4096)) !== false) {
$count[$del]+=substr_count($bufer, $del);
}
rewind($h);
}
fclose($h);
return array_search(max($count), $count);
}