如何使用php删除CSV文件中的额外逗号

时间:2014-04-25 00:28:27

标签: php csv

我正在编写PHP脚本以将CSV文件导入MySQL表。

我的问题是字段用逗号分隔,但有些字段是在一个额外的逗号或双引号内(我发现了双引号的解决方案),但不是额外的逗号。 这是一个例子:

SORT_COLUMN,SORT_ALPHA,GUEST_NAME,PROFILE_ID,FULL_ADDRESS,IS_TOTAL_YN
0,DIAZ REBOLLO ANGELICA,Diaz Rebollo Angelica,824990,"Blvd. Manuel Avila Camacho 36, piso 10   Lomas de Chapul DF 11000"

正如您在FULL ADDRESS字段中所见:

"Blvd. Manuel Avila Camacho 36, piso 10   Lomas de Chapul DF 11000"

在36之前加上"和逗号,

这是PHP CODE的一部分:

$lineseparator = "\n";
foreach(explode($lineseparator,$csvcontent) as $line) {
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);

    // Here I remove double quotes in the csv file
    $line =  str_replace(""",'',$line);
    $linearray = explode($fieldseparator,$line);
    $linemysql = implode("','",$linearray);
    $query = "insert into $databasetable values('$linemysql');";
    $queries .= $query . "\n";
    @mysql_query($query);
}

2 个答案:

答案 0 :(得分:2)

fgetcsv - 这是标准PHP库的一部分 - 是你的朋友。

嗯,大部分时间。当然,请注意$escape参数,这是奇怪的,无用的,破坏的。你需要传递0(注意:文字整数为零,而不是PHP中的任何其他零事物)来禁用它。

答案 1 :(得分:1)

通常,使用csv,我使用;作为字段分隔符,使用\n作为行分隔符。

通常,您会在字段中遇到,,这就是;更适合分离的原因。

编辑:

由于您的地址字段由"括起,您可以使用以下内容:

$line = '0,DIAZ REBOLLO ANGELICA,Diaz Rebollo Angelica,824990,"Blvd. Manuel Avila Camacho 36, piso 10   Lomas de Chapul DF 11000"';

preg_match('/".*"/', $line, $matches);
$address = $matches[0];

$data = explode(',', $line);

$data[4] = $address;

var_dump($data);