Каков правильный символ новой строки в Outlook Contact Export? - PullRequest
0 голосов
/ 05 мая 2011

У меня есть анализатор CSV, который принимает Outlook 2010 Contact Export. CSV-файл и создает массив значений.

Я разбиваю каждую строку на символе новой строки и каждый столбец на запятой. Это работает нормально, пока кто-то не поместит новую строку в поле (обычно Address). Эта новая строка, которую я предполагаю "\ n" или "\ r \ n", разбивает строку там, где не должна, и весь файл становится испорченным с этого момента.

В моем случае это происходит, когда Business Street пишется в две строки:

123 Apple Dr.
Подразделение A

Мой код:

$file = file_get_contents("outlook.csv");
$rows = explode("\r\n",$file);
foreach($rows as $row)
{
   $columns = explode(",",$row);
   // Further manipulation here. 
}

Я пробовал "\ n" и "\ r \ n", тот же результат.

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

Есть ли другой символ для новой строки, который я могу попробовать, который не был бы внутри самих полей данных?

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Я также рекомендую fgetcsv ()

fgetcsv также позаботится о запятых внутри строк (между кавычками).

Интересное руководство по синтаксическому анализу

+1 к предыдущему ответу;)

PS: fgetcsv немного медленнее, чем открытие файла, его взорвать содержимое и т. Д. Но, думаю, оно того стоит.

1 голос
/ 06 мая 2011

Наиболее распространенный способ обработки новых строк в файлах CSV - это "заключать в кавычки" поля, содержащие значимые символы, такие как новые строки или запятые. Возможно, стоит выяснить, делает ли это ваш генератор CSV.

Я рекомендую использовать функцию PHP fgetcsv () , которая предназначена для этой цели. Как вы обнаружили, разбиение строк на запятые работает только в самых тривиальных случаях. В тех случаях, когда это не работает, более сложный, по сообщениям RFC4180-совместимый парсер доступен здесь .

...