提问者:小点点

分析硬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值(' col1 ',' col21,col22,col23 ',' col3 ',' col41,col42 ')。我怎样才能做到呢?(如何正确区分它们?).

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

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


共2个答案

匿名用户

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

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
)

匿名用户

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