2010-12-10 72 views
1

编辑:是否有替代fgetcsv?用户fgetcsv带有和不带引号的条目

下面的代码处理,其中在由报价套管和分隔每一项由逗号ex: "Name","Last" CSV文件...我遇到的问题是有时CSV文件没有围绕每个条目的报价,只是用逗号分隔它ex: Name,Last。我如何处理这两种类型?

$uploadcsv = "/temp/files/Load15.csv"; 
     $handle = fopen($uploadcsv, 'r'); 
     $column_headers = array(); 
$row_count = 0; 
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { 
    if ($row_count==0){ 
    $column_headers = $data; 
    } else { 
    print_r($data); 
    } 
    ++$row_count; 
} 

这个CSV工作:

"Name","Last" 
"Mike","Aidens" 
"Mike1","Aidens1" 

这个CSV不起作用:

Name,Last 
Mike,Aidens 
Mike1,Aidens1 

编辑:奇怪的错误......我试图从一个小片段没有引用的CSV文件,它的工作。奇怪的是,我尝试了一大块,然后整个CSV内容(这都是粘贴到一个新的test.csv文件),它的工作。两个文件都是相同的确切大小17,151kb,但原始的CSV文件不会处理。最后没有尾随空格或行。

+1

你是说它不处理这两种权利吗?会发生什么呢? fgetcsv为我处理了未加引号的值。 – 2010-12-10 12:06:39

+0

@dan什么也没有发生,没有错误,也没有输出。它只适用于“名称”,不会与名称一起使用。我需要它的工作与“名称”,“最后”和名称,最后 – acctman 2010-12-10 12:24:59

+0

提供您的CSV文件,因为fgetcsv不是过错 – 2010-12-10 12:31:02

回答

0

就我所知,fgetcsv应该可以在数据周围引用或不引用数据。

+0

是的,直到它不处理非拉丁字母 – 2013-12-11 23:58:26

0

除非CSV文件格式不正确,否则这将“正常工作”。

换句话说,您无需担心每个字段是否有引号,fgetcsv会为您处理此问题。

+0

纠正它与“姓名”,“最后”像在我的代码上面,但我需要名称,最后被检测和处理。这可能吗? – acctman 2010-12-10 12:26:44

+0

你确定你的CSV文件没有格式错误(有一个缺失或额外的逗号或问号) - fgetcsv应该正确处理这个问题。 – 2010-12-10 12:28:23

+0

你可能是正确的...测试一个小部分,看看现在是否能正常工作.. – acctman 2010-12-10 12:53:09

1

将第4个参数设置为空字符串,它设置机箱,默认为"

fgetcsv($handle, 100000, ",", ''); 
+0

我认为这会工作,但不是..该行是否自动包含带引号的字段? – 2013-12-11 23:52:36

1

使用此行代码的PHP getcsv函数调用之前

ini_set('auto_detect_line_endings',TRUE); 
+1

这救了我的命! – Brainfeeder 2015-10-30 12:50:45