Php 解析硬csv文件
我需要解析硬csv文件并将其放入MySQLPhp 解析硬csv文件,php,mysql,parsing,csv,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 datab
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文件不正确,但我需要解析其中的数据。到iptablecol1,col2,col3,col4。4列
例如,Excel可以正确地将此csv文件转换为列 您可以使用LOAD data语句直接将CSV数据存储到MYSQL中,而不是使用PHP读取CSV文件并将其存储到DB中。这是一些函数explode、STRU 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);
?>
该csv似乎无效,您确定这是您所拥有的吗?csv文件中的双引号看起来非常奇怪?此外,如果文件包含每列的标题,则应跳过循环前的第一行。如果修复了CSV格式,则应能够使用LOAD DATA LOCAL Inflie将其加载到MySQL中。我认为,在进入CSV解析世界之前,需要执行以下操作:1。您需要一个更好的数据库模式:col21、col22、col23从一英里外就散发出糟糕的设计味道,col41、COL242也是如此。你需要生成一个更好的CSV,因为这个CSV已经超越了凌乱3。如果你不能做2,你必须定义一个更好的分隔符,因为逗号和双引号一样不明确。你考虑过phpMyAdmin的导入函数吗?是的,但你仍然必须告诉它CSV文件中的列是什么,不是吗?您仍然需要告诉它数据封装在什么内容中。在这种情况下,这将不起作用,因为csv文件的格式不正确。很抱歉,我需要用PHP完成此操作。@user3302786请参见编辑。代码使用您提供的字符串。我曾希望您能够将它合并到您自己的代码中,以读取中的变量。
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
)