【问题标题】:How can I split a CSV file in PHP?如何在 PHP 中拆分 CSV 文件?
【发布时间】:2013-05-04 07:00:35
【问题描述】:

我有一个很大的 CSV 文件。我想根据其中一个字段中的值将此文件分成单独的文件。

这就是我所做的。使用 fgetcsv 将 CSV 转换为数组,并使用 in_array 检查内容并显示它是否包含数组中的字符串。

我将迭代地从另一个文本文件中获取比较字符串,以检查它是否包含在 csv 中。在这种情况下,我将其指定为“测试”。

下面是代码:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

             if(in_array("Testing", $data))
             {
               var_dump($data);
             }
        }

        fclose($handle);
    }

这是有效的,但现在我被卡住了。如何将$data 写入另一个 CSV 文件?或者有更好的方法吗?

【问题讨论】:

标签: php csv


【解决方案1】:

实际上很简单,如果字符串只需要在线,你甚至不需要 fgetcsv。只是

$srcFile = new SplFileObject('test.csv');
$destFile = new SplFileObject('new.csv', 'w+');
foreach ($srcFile as $line) {
    if (strpos($line, 'testing') !== FALSE) {
        $destFile->fwrite($line);
    }
}

这将创建两个文件对象。第一个包含源文件的内容。第二个为包含搜索字符串的行创建一个全新的文件。然后我们只遍历每一行并检查搜索字符串是否存在。如果是,我们将其写入目标文件。

以这种方式不会触及源文件。如果您想拥有一个带有搜索字符串的文件和一个没有搜索字符串的文件,只需创建第三个 SplFileObject 并将 else 块添加到 if 然后将行写入该文件。最后,删除源csv文件。

【讨论】:

    【解决方案2】:

    你必须做一些棘手的事情,我提供了一些基本的想法,这里是代码:

    //opening file
    if ($fp = fopen('log.csv', 'r')) {
      $line_number = 0;
    
      //loop for Reading file as line by line csv file
      while ($line = fgetcsv($fp, 0, ';')) {
         if ($line_number++ == 0) {
           continue;
         }
    
         //array data string to make possible to provide file name 
         //according to column name required
         $date = explode(' ', $line[0]);
    
         //Change the column name according to your needs
         $file = $date[0] .'.log';
    
         file_put_contents(
            //change the folder name according to your needs
            'monthly/'. $file, 
            //printing data in appended file
             implode(';', $line) ."\n",
             FILE_APPEND
         );
      }
    
      //closing file
      fclose($fp);
     }
    

    它逐行读取 CSV 文件,从第一列中提取日期部分并创建新文件并将数据附加到它。

    注意:

    文件夹“monthly”必须是可写的

    【讨论】:

    • 这比它需要的复杂得多
    • 我认为这是分割大文件的唯一方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多