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 — Obtiene el carácter delimitador, el circundante y de escape para campos CSV
Obtiene el carácter delimitador, el circundante y de escape usados para analizar campos CSV.
Esta función no tiene parámetros.
Devuelve un array indexado que contiene el carácter delimitador, el circundante y el de escape.
Versión | Descripción |
---|---|
7.4.0 | El carácter de escape puede ser ahora un string vacío. |
7.0.10 | Se añadió el carácter de escape al array devuelto. |
Ejemplo #1 Ejemplo de SplFileObject::getCsvControl()
<?php
$fichero = new SplFileObject("datos.txt");
print_r($fichero->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);
}