我看到了很多关于如何自动检测CSV文件分隔符的讨论。其中大部分都是20-30行的函数,包含多个循环、预先确定的分隔符列表、读取前5行并匹配计数等等。以下是一个示例:(链接)。
我刚刚实现了这个过程,并进行了一些修改。它非常出色。
然后我找到了下面的代码:
我刚刚实现了这个过程,并进行了一些修改。它非常出色。
然后我找到了下面的代码:
private function DetectDelimiter($fh)
{
$data_1 = null;
$data_2 = null;
$delimiter = self::$delim_list['comma'];
foreach(self::$delim_list as $key=>$value)
{
$data_1 = fgetcsv($fh, 4096, $value);
$delimiter = sizeof($data_1) > sizeof($data_2) ? $key : $delimiter;
$data_2 = $data_1;
}
$this->SetDelimiter($delimiter);
return $delimiter;
}
在我看来,这似乎达到了相同的结果,其中$delim_list是一个以下分隔符的数组:
static protected $delim_list = array('tab'=>"\t",
'semicolon'=>";",
'pipe'=>"|",
'comma'=>",");
有人能够解释一下为什么我不应该采用这种更简单的方法,以及为什么无论我去哪里寻找答案,都似乎是那种更加复杂的解决方案被认可了吗?
谢谢!