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 — Recupera las opciones para CSV
Recupera el separador, carácter de escape así como el carácter utilizado para rodear los campos durante un análisis CSV de los datos.
Esta función no contiene ningún parámetro.
Devuelve un array indexado que contiene el carácter utilizado para delimitar los campos así como el utilizado para rodearlos y el carácter de escape.
Versión | Descripción |
---|---|
7.4.0 | El carácter de espaciado puede ser ahora una cadena vacía. |
7.0.10 | Se añade el carácter de escape al array devuelto. |
Ejemplo #1 Ejemplo con SplFileObject::getCsvControl()
<?php
$file = new SplFileObject("data.txt");
print_r($file->getCsvControl());
?>
Resultado del ejemplo anterior es similar a :
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);
}