Вложение — это символ, вмещающий поле. Это своего рода дополнительный разделитель.
Например, hello,world
имеет запятую в качестве разделителя полей и не имеет текстового разделителя, а "hello","world"
имеет знак кавычек в качестве текстового разделителя. Некоторые системы используют значения с разделителями и без ограничений для обозначения текстовых и числовых полей соответственно (я полагаю, что это делает Microsoft Excel). Это позволяет полю содержать разделитель поля в своем значении:
"Hello,world","Second Field","Third, and last, field".
Некоторые другие системы заключают только значения, содержащие разделитель полей, или значения, содержащие пробелы, что означает, что в этих системах неограниченное значение не обязательно является числовым.
Если у вас есть «тривиальный» случай — неограниченные значения, без экранированных разделителей полей внутри значений (т. е. без «A, firstpartB \, secondpartB, C») — вы можете вообще пропустить преобразование CSV и запустить
$line = fgets($file, MAX_EXPECTED_LINE_LEN);
// This splits ' A, B, C ' into 'A', ' B' and ' C' (note spaces)
$row = explode(',', trim($line)); // other delimiters can be used
or
// Consider " , ", "," and ", " as the same delimiter
// i.e. ' Alpha , Beta , Gamma ' gets split into 'Alpha', 'Beta' and 'Gamma'
$row = preg_split('#\\s*,\\s*#', trim($line));
Кажется, я не могу воспроизвести проблему, с которой вы столкнулись; может ли это быть связано с другим кодированием концов строк (например, CRLF вместо LF)?
В крайнем случае, вы можете разделить fgetcsv
на два компонента fgets
и str_getcsv()
, манипулируя строкой между вызовами (с помощью trim
или, в худшем случае, добавив пропущенную запятую).
person
LSerni
schedule
22.08.2012