CSV文件中的逗号逗号
我想添加一项功能,允许wvb应用程序的用户使用CSV文件批量上传数据 - 除非数据在实际字段本身包含逗号,否则所有工作都很好。CSV文件中的逗号逗号
有很多关于这个的帖子,我已经阅读了很多关于解决这个问题的方法,主要是用双引号括住逗号,但我无法弄清楚如何为我的代码执行此操作。
最终我不能依赖用户在输入时为我做这件事,所以我需要做它作为上传过程的一部分之前,它击中数据库 - 我试图使用选项卡作为备用分隔符,但Excel似乎是非常在处理标签分离方面不一致,所以我排除了这一点。
(sanitiseData是我用整个现场清理所有的用户输入数据的功能)
$handle = fopen($file_path, 'r');
$row_count=0;
while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {
if ($row_count==0) {
$row_count++;
} else {
$row_count++;
$works_id = sanitiseData($data[0]);
$title = sanitiseData($data[1]);
$first_name = sanitiseData($data[2]);
//Use data to insert into db
$sql = mysql_query("INSERT INTO csv_employee_personal (id,works_id,title,first_name) VALUES ('','$works_id','$title','$first_name')");
}
}
//delete csv file
unlink($file_path);
我假定这是你的数据是什么样子 “数据”,“数据2”,“DATA3 ,还有一些“,”data4“
我的正则表达式非常糟糕,但我认为这将是您的最佳解决方案。
同时,您可以递归地将每个字符排列在一行并跟踪逗号和字段分隔符,并且当您意识到您正在查看未被关闭的逗号时,则可以将其跳过。
如果我给U中的示例数据的数据相匹配,给我几个分钟,而我写一个函数为你逃避逗号
简单地说,数据看起来像123,先生,鲍勃,当它被给予应用程序 - 问题是如果上述出现123,Mr,B,ob – bhttoan 2012-07-19 20:49:43
哦,对不起,先生,不知道如何区分鲍勃的逗号名称和分隔字段的真正逗号。 – Markedagain 2012-07-19 20:53:15
其可能的不好的建议,但额外的逗号总是在名称中?如果第一列始终是id,第二列是2-3字母标题abriviation,那么你可能会做一个字符串替换过去那个点 – Markedagain 2012-07-19 20:55:26
你是如何创建的CSV文件? – 2012-07-19 20:32:09
使用['MySQLi']( http://php.net/manual/en/book.mysqli.php)和['mysqli_query'](http://php.net/manual/en/mysqli.query.php)等。** NOT ** 'mysql _...'。 – 2012-07-19 20:32:43
如果*逗号分隔值*包含未转义的逗号,则数据无效。任何分析它的尝试都是一个幸运的猜测。要求你的用户提交**有效的**数据。 – deceze 2012-07-19 20:34:05