frost18
@frost18
Программист PHP

Как автоматически определить разделитель CSV и кодировку?

Поделитесь пожалуйста примерами как можно определить автоматически разделитель и кодировку файла. Файл читаю функцией "fgetcsv".

Нашел вот такой метод:
private function detectSeparator($csvstring, $fallback = ';'){
    $seps = array(';',',','|',"\t");
    $max = 0;
    $separator = false;
    foreach($seps as $sep){
        $count = substr_count($csvstring, $sep);
        if($count > $max){
            $separator = $sep;
            $max = $count;
        }
    }
    if($separator) return $separator;
    return $fallback;
}
  • Вопрос задан
  • 1691 просмотр
Пригласить эксперта
Ответы на вопрос 3
blrik
@blrik
Музыкант
Нашёл на сайте
function getSplitChar($str) {
	$s = preg_replace('/".+"/isU', '*', $str); 
	$a = [',',';','|']; //список разделителей
	$r;
	$i = -1;
	foreach($a as $c) {
		if(($n = sizeof(explode($c, $s))) > $i) {
			$i = $n;
			$r = $c;
		}
	}
	return $r;
}

//открываем файл
$handle = fopen("test.csv", "r");
$header = fgets($handle);
$char = getSplitChar($header);
//переходим назад к первой строке
fseek($header, 0);

while (($data = fgetcsv($handle, 1000, $char)) !== FALSE) {
    $num = count($data);
    echo "
 $num полей в строке $row: 

\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "
\n";
    }
}
fclose($handle);
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
если поля забраны в кавычки, типа "one";"two", с таким методом вас может ждать сюрприз
Ответ написан
Комментировать
gluck59
@gluck59
Виртуальный глюк
пишу из будущего :)
попробуйте не сообщать separator функции fgetcsv
она сама внутри себя неплохо разбирается
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы