解析硬csv文件

时间:2014-06-03 12:31:32

标签: php mysql parsing csv

我需要解析硬csv文件并将其放到MySQL中。

1.csv:

"col1,""col21, col22, col23"",""col3"",""col41, col42"" 

我的测试php脚本文件:

<?php
$connection = mysql_connect('127.0.0.1:3307','a','') or die ("Unable to connect!"); 
mysql_select_db('test') or die ("Unable to select database!");
mysql_query('SET NAMES utf8');
$fp = fopen("1.csv", "r") or die("Couldn't open filename");
while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{
    $import="INSERT INTO iptable(col1,col2,col3,col4) values('$data[0]','$data[1]','$data[2]','$data[3]')";
    mysql_query($import) or die(mysql_error());
}
fclose($fp);
echo '<b>Successfully added to DB</b>';
?>

我需要插入iptable VALUES(&#39; col1&#39;,&#39; col21,col22,col23&#39;,&#39; col3&#39;,&#39; col41,col42&# 39)。我该怎么做? (如何正确地分开它们?)。

我的csv文件不正确,但我需要解析它的数据。 iptable(col1,col2,col3,col4)。 (4栏)

例如,Excel正确地将此csv文件转换为列。 (http://goo.gl/xm0bly

2 个答案:

答案 0 :(得分:0)

这是一些函数(explode,str_replace)和foreach语句中的一些逻辑的轻微混合,但是如果您的输入将按预期放入数据:

while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{

    $array=explode('""', $data);
    $line=array();
    foreach($array as $val)
    {
        if(trim($val)!="," && trim($val))
        {
            $line[]=str_replace('"', '', $val);
        }
    }

    $import="INSERT INTO iptable(col1,col2,col3,col4) values('$line[0]','$line[1]','$line[2]','$line[3]')";
    mysql_query($import) or die(mysql_error());
}

根据问题中显示的输入,$line数组显示为:

Array
(
    [0] => col1,
    [1] => col21, col22, col23
    [2] => col3
    [3] => col41, col42
)

编辑:根据您的输入字符串,以下代码输出以下文本:

<?php
    $string='"col1,""col21, col22, col23"",""col3"",""col41, col42"" ';

    echo "String input:\r\n".$string."\r\n";

    $array=explode('""', $string);
    $line=array();
    foreach($array as $val)
    {
        if(trim($val)!="," && trim($val))
        {
            $line[]=str_replace('"', '', $val);
        }
    }

    echo '$line variable is currently:'."\r\n";
    print_r($line);

?>

输出:

String input:
"col1,""col21, col22, col23"",""col3"",""col41, col42"" 
$line variable is currently:
Array
(
    [0] => col1,
    [1] => col21, col22, col23
    [2] => col3
    [3] => col41, col42
)

答案 1 :(得分:-2)

您可以使用LOAD DATA语句直接将CSV数据存储到MYSQL中,而不是使用PHP读取CSV文件并存储INTO DB。