Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

fgetcsv skip blank lines in file

Tags:

php

fgetcsv

I have this script that I did, it basically grabs all the files in my "logs" folder and merge them all in one array file, my only problem is that, sometimes the script breaks if there is blank line or empty line! how can I tell it to automatically skip blank empty lines and go to next? blank lines are not necessarily at the top or bottom! could be in the middle of the csv file

<?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 ));
?>
like image 996
hyperexpert Avatar asked Aug 19 '13 22:08

hyperexpert


3 Answers

As you can read in the documentation for fgetcsv():

A blank line in a CSV file will be returned as an array comprising a single null field, and will not be treated as an error.

Checking for that before adding it to your data array should be sufficient:

while (($result = fgetcsv($in)) !== false) {
    if (array(null) !== $result) { // ignore blank lines
        $csv[] = $result;
    }
}
like image 64
Tomas Creemers Avatar answered Nov 04 '22 23:11

Tomas Creemers


This works 100% tested, simplest way. The explanation is that blank lines make fgetcsv return a non-empty array with just a null element inside.

if ($result[0] == NULL)
    continue;
like image 5
rubydio Avatar answered Nov 04 '22 22:11

rubydio


In short

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

Explanation

  1. file reads the content of the file into an array. The FILE_SKIP_EMPTY_LINES will skip the empty lines in the file.
  2. array_map will apply the function str_getcsv on each element of the array. str_getcsv will parse the string input for fields in csv format and return an array containing the fields.

Read more about str_getcsv

Read more about file

Read more about array_map

like image 2
ash__939 Avatar answered Nov 05 '22 00:11

ash__939