如何确定csv文件字段是制表符分隔还是逗号分隔 [英] how to find out if csv file fields are tab delimited or comma delimited

查看:283
本文介绍了如何确定csv文件字段是制表符分隔还是逗号分隔的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何确定csv文件字段是用制表符分隔还是用逗号分隔.我需要为此进行php验证.任何人都可以帮忙.预先感谢.

how to find out if csv file fields are tab delimited or comma delimited. I need php validation for this. Can anyone plz help. Thanks in advance.

推荐答案

回答这个问题为时已晚,但希望对您有所帮助.

It's too late to answer this question but hope it will help someone.

这是一个简单的函数,它将返回文件的定界符.

Here's a simple function that will return a delimiter of a file.

function getFileDelimiter($file, $checkLines = 2){
        $file = new SplFileObject($file);
        $delimiters = array(
          ',',
          '\t',
          ';',
          '|',
          ':'
        );
        $results = array();
        $i = 0;
         while($file->valid() && $i <= $checkLines){
            $line = $file->fgets();
            foreach ($delimiters as $delimiter){
                $regExp = '/['.$delimiter.']/';
                $fields = preg_split($regExp, $line);
                if(count($fields) > 1){
                    if(!empty($results[$delimiter])){
                        $results[$delimiter]++;
                    } else {
                        $results[$delimiter] = 1;
                    }   
                }
            }
           $i++;
        }
        $results = array_keys($results, max($results));
        return $results[0];
    }

如下所示使用此功能:

$delimiter = getFileDelimiter('abc.csv'); //Check 2 lines to determine the delimiter
$delimiter = getFileDelimiter('abc.csv', 5); //Check 5 lines to determine the delimiter

PS我使用了preg_split()而不是explode(),因为explode('\ t',$ value)不会给出正确的结果.

更新:感谢@RichardEB指出代码中的错误.我已经更新了.

UPDATE: Thanks for @RichardEB pointing out a bug in the code. I have updated this now.

这篇关于如何确定csv文件字段是制表符分隔还是逗号分隔的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆