PHP fgetcsv с символом конца строки

У меня есть файл странного формата, который мне нужно проанализировать с помощью PHP. Он использует ^ в качестве разделителя полей и ~ в качестве символа конца строки. Я могу легко установить параметр $delimiter для fgetcsv на ^, чтобы получить большую часть данных. Проблема в том, что fgetcsv не принимает символ EOL в качестве параметра, поэтому он читает строки на основе разрывов строк, а не с учетом символа EOL.

Есть ли способ обойти это?


person user101289    schedule 07.07.2014    source источник
comment
У вас есть пример этих странно отформатированных данных?   -  person ArtisticPhoenix    schedule 08.07.2014


Ответы (2)


Старый добрый PHP, где люди забывают, как делать что-то вручную, если есть какая-то полусырая стандартная функция:

$lines = explode('~', file_get_contents($pathToMyFile));
foreach($lines as $line)
{
  $values = explode('^', $line);
}

В зависимости от стратегии побега (если ^ или ~ встречаются в значениях), вам придется немного изменить это.

person Niels Keurentjes    schedule 07.07.2014
comment
@Нильс-- очень мило! Спасибо за напоминание о том, что от функций может быть больше проблем, чем пользы. - person user101289; 08.07.2014
comment
Насколько большой файл, тогда вопрос? - person ArtisticPhoenix; 08.07.2014

Вы можете прочитать файл, заменить ~ на \n, а затем использовать str_getcsv:

$csv = file_get_contents('/path/to/file.csv');
$csv = str_replace('~','\n',$csv);
$csv = str_getcsv($csv, '^');
person dave    schedule 07.07.2014