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 tiene parámetros.
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());
?>
El resultado del ejemplo sería algo 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().
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);
}