Enclosure е символът, ограждащ полето. Това е един вид допълнителен разделител.
Например 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