Php 尝试读取杂乱的CSV文件
我正在尝试使用fgetcsv php函数进行读取,但它并没有像预期的那样获取详细信息。我发现CSV文件杂乱无章,开头和中间有多个不相关的逗号。如何使这个CSV更干净 我使用str_replace php函数删除了三个逗号,但开始时的逗号仍然给我带来了一个问题。我也试过ltrim,但也没用Php 尝试读取杂乱的CSV文件,php,csv,Php,Csv,我正在尝试使用fgetcsv php函数进行读取,但它并没有像预期的那样获取详细信息。我发现CSV文件杂乱无章,开头和中间有多个不相关的逗号。如何使这个CSV更干净 我使用str_replace php函数删除了三个逗号,但开始时的逗号仍然给我带来了一个问题。我也试过ltrim,但也没用 <?php $file = "grid.csv"; $s = file_get_contents($file); $s = str_replace(",,,", "", $s);
<?php
$file = "grid.csv";
$s = file_get_contents($file);
$s = str_replace(",,,", "", $s);
//$s = ltrim($s,",");
$f = "grid1.csv";
$handle = fopen($f, "w");
fwrite($handle, $s);
?>
我希望这段代码的输出是一个干净的csv文件。但我现在在新文件中也得到了多个逗号
这是我尝试使用fgetcsv读取文件的主代码
if(isset($_POST["submit"])){
echo "in submit</br>";
if($_FILES['csv_info']['name']){
echo "some file</br>";
$filename = explode(".", $_FILES['csv_info']['name']);
if(end($filename) == 'csv'){
echo "file is csv</br>".$_FILES['csv_info']['tmp_name'];
$handle = fopen($_FILES['csv_info']['tmp_name'],"r");
$sid = 0;
//$query = "select exists(select 1 from tblMarks)";
//$choice = mysqli_query($conn, $query);
while($data = fgetcsv($handle)){
if($sid == 0){
$sid = $sid + 1;
continue;
}
//echo $data;
$name = mysqli_real_escape_string($conn, $data[0]);
$physics = mysqli_real_escape_string($conn, $data[1]);
$maths = mysqli_real_escape_string($conn, $data[2]);
$chemistry = mysqli_real_escape_string($conn, $data[3]);
$bio = mysqli_real_escape_string($conn, $data[4]);
$sst = mysqli_real_escape_string($conn, $data[5]);
echo "</br>inserting sid".$sid." name=".$name." physics=".$physics." maths=".$maths." chemistry=".$chemistry." bio=".$bio." sst=".$sst."</br>";
//$query = "insert into tblMarks (sid, name, physics, maths, chemistry, bio, sst) values ('$sid', '$name', '$physics', '$maths','$chemistry','$bio','$sst') on duplicate key update name = '$name', physics = '$physics',maths = '$maths', chemistry = '$chemistry', bio = '$bio', sst ='$sst'";
//mysqli_query($conn, $query);
$sid = $sid + 1;
}
fclose($handle);
}
else{
$message = '<label class="text-danger">Please Select CSV File Only</lable>';
}
}
else{
$message = '<label class="text-danger">Please Select File</label>';
}
}
结果如下:
下面是逐行读取CSV文件的正确方法。CSV文件中有许多行具有空值,要删除主题数组,请使用过滤器
$temp = array();
if (($h = fopen("grid.csv", "r")) !== FALSE)
{
// Convert each line into the local $data variable
while (($data = fgetcsv($h, 1000, ",")) !== FALSE)
{
$data = array_filter($data);
if(count($data) > 0){
$temp[] = $data;
}
}
fclose($h);
}
//Write csv file
$fp = fopen('grid1.csv', 'w');
foreach ($temp as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
请共享csv数据示例以及您希望得到的结果如何?您可能不喜欢听到这种说法,但如果csv文件中充斥着逗号,则您需要使用不同的分隔符,或者必须手动清理该文件。此外,,,可能表示它们之间的空值。为什么不使用?csv文件是正确的。当然,如果有一些空行,但没有杂乱无章的内容,请执行或不执行。没有尝试。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。