Home > OS >  Read all csv files in directory doesn't read lines correctly
Read all csv files in directory doesn't read lines correctly

Time:11-09

I have a script that reads all CSV files in a given directory. The reading is okay, but the output isn't what I'm seeking.

The content of the files is

7,5133606393691467151,000000000000000000
5,-841871172646878578,00000000000000
8,-482903031559659252,000000000000

Desired output

Array (
    [0] => Array
    (
       id: 7
       number_1: 5133606393691467151
       number_2: 000000000000000000
    )
    [1] => Array (
       id: 5
       number_1: -841871172646878578
       number_2: 00000000000000
    )
    [2] => Array (
       id: 8
       number_1: -482903031559659252
       number_2: 000000000000
    )
)

This is my code so far

$files = glob("SQLs/*.csv");

foreach($files as $file) {

    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
            foreach ($data as $lineArr) {
                list($id[],$number_1[],$number_2[]) = $lineArr;
            }
        }
        fclose($handle);
    } else {
        echo "Could not open file: " . $file;
    }
}

Currently got error 500 when I run it through the browser. If I run it in a console like php example.php >> output.txt got nothing again. The file output.txt is empty.

CodePudding user response:

Simplify the idea a bit, as fgetcsv() returns an array containing only the values from that line of the .csv, you just need to place those values into an assoc array of the size and shape of your choosing.

$files = glob("SQLs/*.csv");
$desired= [];   //init the receiving array

foreach($files as $file) {

    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
            $desired[] = [  'id'        => $data[0], 
                            'number_1'  => $data[1], 
                            'number_2'  => $data[2] 
                         ];
        }
        fclose($handle);
    } else {
        echo "Could not open file: " . $file;
    }
}

This of course would put all the data from all the files into one array. You may find if there is a lot of data, this may blow your max memory. But thats another issue.

  • Related