Как использовать setcsvcontrol()

Доброе утро,

Я разрабатываю сценарий для создания файла CSV. Моя проблема - разделитель файла CSV, мне нужно использовать ";".

Я прочитал, что я должен использовать "setcsvcontrol()", но я пытаюсь использовать его, и у меня не было никаких результатов.

Это часть моего сценария:

$create = fopen($fecha."p.csv", "a");
$file = new SplFileObject($fecha."p.csv");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');

foreach($cadena as $fields){    

    fputcsv($create,$fields);
}

Благодарю.

2 ответа

Решение

SplFileObject::setCsvControl() влияет только на объект, на котором он был вызван, т.е. $file возражать в вашем случае. Это не влияет на $create объект, который вы получили от fopen даже если оба объекта работают с одним файлом.

Либо пиши в $create использование объекта fputcsv($handle, $fields, $delimiter, $enclosure), проходя $create в качестве первого аргумента и желаемого разделителя и вложения в качестве третьего и четвертого аргументов или вызова $file->fputcsv(), В последнем случае вы должны создать SplFileObject с возможностью записи с использованием подходящего $open_mode,

Вы не передаете разделитель fputcsv;

fputcsv($create,$fields, ";");

Вы также можете безопасно удалить

$file = new SplFileObject($fecha."p.csv");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');

если вы должны использовать SplFileObject Затем измените свой код на.

$file = new SplFileObject("data.csv");
$file->setFlags(SplFileObject::WRITE_CSV);
$file->setCsvControl(';');
foreach ($rows as $row) {
    $file->fputcsv($row);
}
Другие вопросы по тегам