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;
}
  • Вопрос задан
  • 1577 просмотров
Пригласить эксперта
Ответы на вопрос 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
она сама внутри себя неплохо разбирается
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект