I simply would like to import this text from a csv file into a laravel php script that parses it:
store_id,ref,priority,tagline
10,confuscian,5,confuscian says
when I send this on a mac machine on chrome, the body of the csv appears like this:
so you can see that a \n
is added:
{"csv":"store_id,ref,priority,tagline\n10,confuscian,5,confuscian says"}
however, when I add the same csv from windows, it appears like so:
{"csv":"store_id,ref,priority,tagline 10,confuscian,5,confuscian says"}
the script that reads this filters out the \r\n
different OS problem like so:
$file = storage_path('batch_update.csv');
// replace new line characters for mac/win/linux
$str = preg_replace('/(\r\n|\r|\n)+/', "\n", $this->data);
file_put_contents($file, $str);
$this->data = $this->csvToArray($file);
if (!$this->data || !$this->checkForRequiredColumns()) {
return false;
}
the problem is that in windows, the \n
doesn't even show up! which confuses the csvToArray script:
trait CsvHelpers { private function csvToArray($filename) { if (!file_exists($filename) || !is_readable($filename)) { return false; }
$header = null;
$data = array();
if (($handle = fopen($filename, 'r')) !== false) {
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
$row = array_map('trim', $row);
if (!$header) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
fclose($handle);
}
return $data;
}
question
how do i make it so that when i export a csv in windows, every line ends in \n
?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire