13

我有这个脚本,它基本上抓取了我的“日志”文件夹中的所有文件并将它们全部合并到一个数组文件中,我唯一的问题是,有时如果有空行或空行,脚本就会中断!我怎么能告诉它自动跳过空白的空行并转到下一个?空行不一定在顶部或底部!可能在 csv 文件的中间

<?php
    $csv = array();
    $files = glob('../logs/*.*');
    $out = fopen("newfile.txt", "w");

    foreach($files as $file){
        $in = fopen($file, "r");

    while (($result = fgetcsv($in)) !== false)

        {   
            $csv[] = $result;
        }

        fclose($in);
        fclose($out);
    }

    print json_encode(array('aaData' => $csv ));
?>
4

3 回答 3

21

正如您可以在文档中fgetcsv()阅读的:

CSV 文件中的空白行将作为包含单个空字段的数组返回,并且不会被视为错误。

在将其添加到数据数组之前进行检查就足够了:

while (($result = fgetcsv($in)) !== false) {
    if (array(null) !== $result) { // ignore blank lines
        $csv[] = $result;
    }
}
于 2013-08-19T23:06:25.123 回答
4

这工作 100% 测试,最简单的方法。解释是空行使 fgetcsv 返回一个非空数组,其中只有一个空元素。

if ($result[0] == NULL)
    continue;
于 2017-11-04T16:45:35.283 回答
2

简而言之

$csv = array_map('str_getcsv', file($file_path, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES));

解释

  1. file将文件的内容读入一个数组。将FILE_SKIP_EMPTY_LINES跳过文件中的空行。
  2. array_map将函数应用于str_getcsv数组的每个元素。str_getcsv将解析格式字段的字符串输入 csv并返回包含字段的数组。

阅读有关str_getcsv 的更多信息

阅读有关文件的更多信息

阅读有关array_map 的更多信息

于 2018-10-16T12:43:39.960 回答