Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试读取杂乱的CSV文件_Php_Csv - Fatal编程技术网

Php 尝试读取杂乱的CSV文件

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);

我正在尝试使用fgetcsv php函数进行读取,但它并没有像预期的那样获取详细信息。我发现CSV文件杂乱无章,开头和中间有多个不相关的逗号。如何使这个CSV更干净

我使用str_replace php函数删除了三个逗号,但开始时的逗号仍然给我带来了一个问题。我也试过ltrim,但也没用

<?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,而且是为了未来的访客。