Php .csv文件有问题,缺少逗号
大家好,我有一个通过PHP代码打开CSV的问题。我的PHP代码是:Php .csv文件有问题,缺少逗号,php,csv,fgetcsv,Php,Csv,Fgetcsv,大家好,我有一个通过PHP代码打开CSV的问题。我的PHP代码是: <?php header("Content-Type: text/html; charset=windows-1251"); echo "<html> <head> <title></title> </head> <body> "; $file = "import.csv"; if(file_exists($file)) { if
<?php
header("Content-Type: text/html; charset=windows-1251");
echo "<html>
<head>
<title></title>
</head>
<body>
";
$file = "import.csv";
if(file_exists($file)) {
if (($fopen = fopen($file, "r")) !== FALSE) {
echo "<table>\n";
while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
$max = count($data);
$num++;
echo "<tr>\n<td>".$num."</td>\n";
for ($i=0;$i<$max;$i++) {
echo "<td>".$data[$i]."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
fclose($fopen);
}
}
else {
echo "File doesn't exists!";
}
echo "
</body>
</html>";
?>
如果您无法控制传入的CSV,则无法使用fgetcsv。它怎么知道是否有一个丢失的 不幸的是,您必须编写自己的函数来处理此问题。我首先将每一行读入一个数组。然后在这行中循环并用逗号将其分解。然后,您必须检查每个值,并尝试确定结果数组中是否缺少某些内容 让我们看看您的示例中有问题的一行
Six, Sfamily, Male, 1967, 9876542
以下是我们对它的了解:
它包含的值比所有其他值少一个,因此我们应该对它运行一些数据一致性检查。
我们知道第一个和第二个值将是不等于男性或女性的字符串。
我们知道第三个值应该总是等于男性或女性。
我们知道第四个值是一年,应该是一个数值。
我们知道第五个值丢失了,它应该是一个城市代码,长度将始终为两个字母。
根据这些信息,您应该能够编写一些检查,以确定其中一个值是否不等于预期值,然后进行修复。问题最有可能与以下行有关:
Six, Sfamily, Male, 1967, 9876542
没有城市信息的地方。在这种情况下,除非您应用一些逻辑来确定这不是城市,并跳到下一列,否则您永远不会在电话列中显示9876542。但是,您应该做的是,在每行中有6列,而不是每次都重置$max,您应该在读取标题后设置它一次。然后显示您读取的每行中的列数。有什么问题?从描述中我不理解代码的工作原理,并且正确地显示了内容-那么问题出在哪里?您是否将数据包含在引号中?您的意思是您希望fgetcsv识别出城市在六个方面缺失,SF家庭,男性,1967,9876542。。。你假设计算机有高度的智能。。。这是你必须自己解决的问题如果文件不是一个格式良好的csv文件,我认为在其解析过程中出现意外行为是正常的,无需读取为字符串并分解。。。使用fgetcsv正常读取,然后使用foreach循环,并使用array_splice将任何不符合规则的数据推入插槽
<?php
header("Content-Type: text/html; charset=windows-1251");
echo "<html>
<head>
<title></title>
</head>
<body>
";
$file = "import.csv";
if(file_exists($file)) {
if (($fopen = fopen($file, "r")) !== FALSE) {
echo "<table>\n";
while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
$num++;
echo "<tr>\n<td>".$num."</td>\n";
foreach($data as $k => $v) {
switch ($k) {
case 0 : // first name
case 1 : // family
case 2 : // sex
case 4 : // city
if (is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
case 3 : // date of birth
case 5 : // phone number
if (!is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
}
}
foreach($data as $v) {
echo "<td>".$v."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
fclose($fopen);
}
}
else {
echo "File doesn't exists!";
}
echo "
</body>
</html>";
?>
<?php
header("Content-Type: text/html; charset=windows-1251");
echo "<html>
<head>
<title></title>
</head>
<body>
";
$file = "import.csv";
if(file_exists($file)) {
if (($fopen = fopen($file, "r")) !== FALSE) {
echo "<table>\n";
while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
$num++;
echo "<tr>\n<td>".$num."</td>\n";
foreach($data as $k => $v) {
switch ($k) {
case 0 : // first name
case 1 : // family
case 2 : // sex
case 4 : // city
if (is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
case 3 : // date of birth
case 5 : // phone number
if (!is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
}
}
foreach($data as $v) {
echo "<td>".$v."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
fclose($fopen);
}
}
else {
echo "File doesn't exists!";
}
echo "
</body>
</html>";
?>