Bitrix-D7  20.0.0
Класс CsvFile
Граф наследования:CsvFile:
File FileEntry IFileStream FileSystemEntry

Открытые члены

 openLoad ()
 Opens file for reading. Подробнее...
 
 openWrite ()
 Opens file for writing. Подробнее...
 
 setUtf8Bom ($mark=self::BOM_TYPE_UTF8)
 Sets UTF Byte-Order Mark. Подробнее...
 
 hasUtf8Bom ()
 Tells true if UTF Byte-Order Mark exists in the file. Подробнее...
 
 prefaceWithUtf8Bom ($exists=true)
 Sets if UTF-8 Byte-Order Mark exists. Подробнее...
 
 checkUtf8Bom ()
 Check UTF-8 Byte-Order Mark. Подробнее...
 
 setFieldsType ($fieldsType=self::FIELDS_TYPE_WITH_DELIMITER)
 Set fields type. Подробнее...
 
 setFieldDelimiter ($fieldDelimiter=self::DELIMITER_TZP)
 Sets up delimiter character. Подробнее...
 
 setRowDelimiter ($rowDelimiter=self::LINE_DELIMITER_WIN)
 Sets up row delimiter character. Подробнее...
 
 setFirstHeader ($firstHeader=false)
 Sets first row as a header. Подробнее...
 
 getFirstHeader ()
 Tells true if first row is a header. Подробнее...
 
 setWidthMap ($mapFields)
 Sets up fields widths. Подробнее...
 
 fetch ()
 Fetch data row. Подробнее...
 
 put (array $fields)
 Writes data fields into file as row. Подробнее...
 
- Открытые члены унаследованные от File
 __construct ($path, $siteId=null)
 
 open ($mode)
 Opens the file and returns the file pointer. Подробнее...
 
 close ()
 Closes the file. Подробнее...
 
 isExists ()
 
 getContents ()
 
 putContents ($data, $flags=self::REWRITE)
 
 getSize ()
 Returns the file size. Подробнее...
 
 seek ($position)
 Seeks on the file pointer from the beginning (SEEK_SET only). Подробнее...
 
 isWritable ()
 
 isReadable ()
 
 readFile ()
 
 getCreationTime ()
 
 getLastAccessTime ()
 
 getModificationTime ()
 
 markWritable ()
 
 getPermissions ()
 
 delete ()
 
 getContentType ()
 
- Открытые члены унаследованные от FileEntry
 getExtension ()
 
 putContents ($data)
 
 getFileSize ()
 
 isDirectory ()
 
 isFile ()
 
 isLink ()
 
- Открытые члены унаследованные от FileSystemEntry
 isSystem ()
 
 getName ()
 
 getDirectoryName ()
 
 getPath ()
 
 getDirectory ()
 
 getPhysicalPath ()
 
 rename ($newPath)
 

Поля данных

const FIELDS_TYPE_FIXED_WIDTH = 'F'
 
const FIELDS_TYPE_WITH_DELIMITER = 'R'
 
const DELIMITER_TAB = "\t"
 
const DELIMITER_ZPT = ','
 
const DELIMITER_SPS = ' '
 
const DELIMITER_TZP = ';'
 
const BOM_TYPE_UTF8 = "\xEF\xBB\xBF"
 
const LINE_DELIMITER_WIN = "\r\n"
 
const LINE_DELIMITER_UNIX = "\r"
 
- Поля данных унаследованные от File
const REWRITE = 0
 
const APPEND = 1
 

Защищенные члены

 fetchDelimiter ()
 Fetches data row as delimited columns. Подробнее...
 
 fetchWidth ()
 Fetches data row as fixed width columns. Подробнее...
 
 incrementCurrentPosition ()
 Moves reading position and reads file into buffer. Подробнее...
 
 moveFirst ()
 Moves reading position to the first byte. Подробнее...
 
 getPos ()
 Returns reading position. Подробнее...
 
 setPos ($position=0)
 Sets new reading position. Подробнее...
 

Защищенные данные

 $fieldsType = self::FIELDS_TYPE_WITH_DELIMITER
 
 $fieldDelimiter = self::DELIMITER_TZP
 
 $bomMark = self::BOM_TYPE_UTF8
 
 $hasBom = false
 
 $rowDelimiter = self::LINE_DELIMITER_WIN
 
 $widthMap = array()
 
 $firstHeader = false
 
- Защищенные данные унаследованные от File
 $filePointer
 
- Защищенные данные унаследованные от FileSystemEntry
 $path
 
 $originalPath
 
 $pathPhysical
 
 $siteId
 

Дополнительные унаследованные члены

- Открытые статические члены унаследованные от File
static isFileExists ($path)
 
static getFileContents ($path)
 
static putFileContents ($path, $data, $flags=self::REWRITE)
 
static deleteFile ($path)
 
- Защищенные статические члены унаследованные от FileSystemEntry
static getDocumentRoot ($siteId)
 

Подробное описание

См. определение в файле csvfile.php строка 7

Методы

◆ checkUtf8Bom()

checkUtf8Bom ( )

Check UTF-8 Byte-Order Mark.

Возвращает
bool

См. определение в файле csvfile.php строка 167

168  {
169  $this->seek(0);
170  $bom = $this->read(BinaryString::getLength($this->bomMark));
171  if($bom === $this->bomMark)
172  {
173  $this->hasBom = true;
174  }
175 
176  if ($this->hasBom)
177  {
178  $this->seek(BinaryString::getLength($this->bomMark));
179  }
180  else
181  {
182  $this->seek(0);
183  }
184 
185  return $this->hasBom;
186  }

◆ fetch()

fetch ( )

Fetch data row.

Возвращает
array|bool

См. определение в файле csvfile.php строка 441

442  {
443  if ($this->fieldsType == self::FIELDS_TYPE_WITH_DELIMITER)
444  {
445  if ($this->fieldDelimiter == '')
446  {
447  return false;
448  }
449 
450  return $this->fetchDelimiter();
451  }
452 
453  if (empty($this->widthMap))
454  {
455  return false;
456  }
457 
458  return $this->fetchWidth();
459  }

◆ fetchDelimiter()

fetchDelimiter ( )
protected

Fetches data row as delimited columns.

Возвращает
array|bool

См. определение в файле csvfile.php строка 275

276  {
277  $isInside = false;
278  $str = '';
279  $result = array();
280  while ($this->currentPosition <= $this->fileSize)
281  {
282  $ch = $this->buffer[$this->bufferPosition];
283  if ($ch == "\r" || $ch == "\n")
284  {
285  if (!$isInside)
286  {
287  while ($this->currentPosition <= $this->fileSize)
288  {
289  $this->incrementCurrentPosition();
290  $ch = $this->buffer[$this->bufferPosition];
291  if ($ch != "\r" && $ch != "\n")
292  {
293  break;
294  }
295  }
296  if ($this->firstHeader)
297  {
298  $this->firstHeader = false;
299  $result = array();
300  $str = '';
301  continue;
302  }
303 
304  $result[] = $str;
305  return $result;
306  }
307  }
308  elseif ($ch == "\"")
309  {
310  if (!$isInside)
311  {
312  $isInside = true;
313  $this->incrementCurrentPosition();
314  continue;
315  }
316 
317  $this->incrementCurrentPosition();
318  if ($this->buffer[$this->bufferPosition] != "\"")
319  {
320  $isInside = false;
321  continue;
322  }
323  }
324  elseif ($ch == $this->fieldDelimiter)
325  {
326  if (!$isInside)
327  {
328  $result[] = $str;
329  $str = '';
330  $this->incrementCurrentPosition();
331  continue;
332  }
333  }
334 
335  //inline "call"
336  $this->currentPosition ++;
337  $this->bufferPosition ++;
338  if ($this->bufferPosition >= $this->bufferSize)
339  {
340  $this->buffer = $this->read(1024 * 1024);
341  $this->bufferSize = BinaryString::getLength($this->buffer);
342  $this->bufferPosition = 0;
343  }
344 
345  $str .= $ch;
346  }
347 
348  if ($str <> '')
349  {
350  $result[] = $str;
351  }
352 
353  if(empty($result))
354  {
355  return false;
356  }
357 
358  return $result;
359  }

◆ fetchWidth()

fetchWidth ( )
protected

Fetches data row as fixed width columns.

Возвращает
array|bool

См. определение в файле csvfile.php строка 366

367  {
368  $str = '';
369  $ind = 1;
370  $jnd = 0;
371  $result = array();
372 
373  while ($this->currentPosition <= $this->fileSize)
374  {
375  $ch = $this->buffer[$this->bufferPosition];
376  if ($ch == "\r" || $ch == "\n")
377  {
378  while ($this->currentPosition <= $this->fileSize)
379  {
380  $this->incrementCurrentPosition();
381  $ch = $this->buffer[$this->bufferPosition];
382  if ($ch != "\r" && $ch != "\n")
383  {
384  break;
385  }
386  }
387  if ($this->firstHeader)
388  {
389  $this->firstHeader = false;
390  $result = array();
391  $ind = 1;
392  $str = '';
393  continue;
394  }
395 
396  $result[] = $str;
397  return $result;
398  }
399  if ($ind == $this->widthMap[$jnd])
400  {
401  $result[] = $str. $ch;
402  $str = '';
403  $this->incrementCurrentPosition();
404  $ind ++;
405  $jnd ++;
406  continue;
407  }
408 
409  //inline "call"
410  $this->currentPosition ++;
411  $this->bufferPosition ++;
412  if($this->bufferPosition >= $this->bufferSize)
413  {
414  $this->buffer = $this->read( 1024 * 1024);
415  $this->bufferSize = BinaryString::getLength($this->buffer);
416  $this->bufferPosition = 0;
417  }
418 
419  $ind ++;
420  $str .= $ch;
421  }
422 
423  if ($str <> '')
424  {
425  $result[] = $str;
426  }
427 
428  if(empty($result))
429  {
430  return false;
431  }
432 
433  return $result;
434  }

◆ getFirstHeader()

getFirstHeader ( )

Tells true if first row is a header.

Возвращает
bool

См. определение в файле csvfile.php строка 248

249  {
250  return $this->firstHeader;
251  }

◆ getPos()

getPos ( )
protected

Returns reading position.

Возвращает
int

См. определение в файле csvfile.php строка 493

494  {
495  return $this->currentPosition;
496  }

◆ hasUtf8Bom()

hasUtf8Bom ( )

Tells true if UTF Byte-Order Mark exists in the file.

Возвращает
bool

См. определение в файле csvfile.php строка 144

145  {
146  return $this->hasBom;
147  }

◆ incrementCurrentPosition()

incrementCurrentPosition ( )
protected

Moves reading position and reads file into buffer.

Возвращает
void

См. определение в файле csvfile.php строка 466

467  {
468  $this->currentPosition ++;
469  $this->bufferPosition ++;
470  if ($this->bufferPosition >= $this->bufferSize)
471  {
472  $this->buffer = $this->read( 1024 * 1024);
473  $this->bufferSize = BinaryString::getLength($this->buffer);
474  $this->bufferPosition = 0;
475  }
476  }

◆ moveFirst()

moveFirst ( )
protected

Moves reading position to the first byte.

Возвращает
void

См. определение в файле csvfile.php строка 483

484  {
485  $this->setPos(0);
486  }

◆ openLoad()

openLoad ( )

Opens file for reading.

Возвращает
bool

См. определение в файле csvfile.php строка 94

95  {
96  if (parent::openLoad())
97  {
98  $this->fileSize = $this->getSize();
99  $this->checkUtf8Bom();
100  }
101 
102  return $this->isExists() && $this->isReadable();
103  }

◆ openWrite()

openWrite ( )

Opens file for writing.

Возвращает
bool

См. определение в файле csvfile.php строка 110

111  {
112  if (parent::openWrite())
113  {
114  $this->fileSize = 0;
115  if ($this->hasBom)
116  {
117  $this->fileSize = $this->write($this->bomMark);
118  }
119 
120  return true;
121  }
122 
123  return false;
124  }

◆ prefaceWithUtf8Bom()

prefaceWithUtf8Bom (   $exists = true)

Sets if UTF-8 Byte-Order Mark exists.

Аргументы
bool$existsFlag value to setup.
Возвращает
self

См. определение в файле csvfile.php строка 156

157  {
158  $this->hasBom = $exists;
159 
160  return $this;
161  }

◆ put()

put ( array  $fields)

Writes data fields into file as row.

Аргументы
array$fieldsData field.
Возвращает
bool

См. определение в файле csvfile.php строка 537

538  {
539  $length = false;
540  if ($this->fieldsType == self::FIELDS_TYPE_WITH_DELIMITER)
541  {
542  $content = '';
543  for ($i = 0, $n = count($fields); $i < $n; $i++)
544  {
545  if ($i>0)
546  {
547  $content .= $this->fieldDelimiter;
548  }
549  $pos1 = strpos($fields[$i], $this->fieldDelimiter);
550  $pos2 = $pos1 || strpos($fields[$i], "\"");
551  $pos3 = $pos2 || strpos($fields[$i], "\n");
552  $pos4 = $pos3 || strpos($fields[$i], "\r");
553  if ($pos1 !== false || $pos2 !== false || $pos3 !== false || $pos4 !== false)
554  {
555  $fields[$i] = str_replace("\"", "\"\"", $fields[$i]);
556  $fields[$i] = str_replace("\\", "\\\\", $fields[$i]);
557  }
558  $content .= "\"";
559  $content .= $fields[$i];
560  $content .= "\"";
561  }
562  if ($content <> '')
563  {
564  $content .= $this->rowDelimiter;
565 
566  $length = $this->write($content);
567  if ($length !== false)
568  {
569  $this->fileSize += $length;
570  }
571  }
572  }
573  // todo: $this->fieldsType == self::FIELDS_TYPE_FIXED_WIDTH
574 
575  return ($length !== false);
576  }

◆ setFieldDelimiter()

setFieldDelimiter (   $fieldDelimiter = self::DELIMITER_TZP)

Sets up delimiter character.

Аргументы
string$fieldDelimiterChar.
Возвращает
self

См. определение в файле csvfile.php строка 209

210  {
211  $this->fieldDelimiter = (strlen($fieldDelimiter) > 1 ? substr($fieldDelimiter, 0, 1) : $fieldDelimiter);
212 
213  return $this;
214  }

◆ setFieldsType()

setFieldsType (   $fieldsType = self::FIELDS_TYPE_WITH_DELIMITER)

Set fields type.

Аргументы
string$fieldsTypeType.
Возвращает
self

См. определение в файле csvfile.php строка 194

195  {
196  $this->fieldsType =
197  ($fieldsType == self::FIELDS_TYPE_FIXED_WIDTH ? self::FIELDS_TYPE_FIXED_WIDTH : self::FIELDS_TYPE_WITH_DELIMITER);
198 
199  return $this;
200  }

◆ setFirstHeader()

setFirstHeader (   $firstHeader = false)

Sets first row as a header.

Аргументы
bool$firstHeaderFlag.
Возвращает
self

См. определение в файле csvfile.php строка 236

237  {
238  $this->firstHeader = $firstHeader;
239 
240  return $this;
241  }

◆ setPos()

setPos (   $position = 0)
protected

Sets new reading position.

Аргументы
int$positionReading position.
Возвращает
void

См. определение в файле csvfile.php строка 505

506  {
507  $position = intval($position);
508  if ($position <= $this->fileSize)
509  {
510  $this->currentPosition = $position;
511  }
512  else
513  {
514  $this->currentPosition = $this->fileSize;
515  }
516 
517  $pos = $this->currentPosition;
518  if($this->hasBom)
519  {
520  $pos += 3;
521  }
522  $this->seek($pos);
523 
524  $this->buffer = $this->read(1024 * 1024);
525 
526  $this->bufferSize = BinaryString::getLength($this->buffer);
527  $this->bufferPosition = 0;
528  }

◆ setRowDelimiter()

setRowDelimiter (   $rowDelimiter = self::LINE_DELIMITER_WIN)

Sets up row delimiter character.

Аргументы
string$rowDelimiterChar.
Возвращает
self

См. определение в файле csvfile.php строка 223

224  {
225  $this->rowDelimiter = $rowDelimiter;
226 
227  return $this;
228  }

◆ setUtf8Bom()

setUtf8Bom (   $mark = self::BOM_TYPE_UTF8)

Sets UTF Byte-Order Mark.

Аргументы
string$markBOM mark.
Возвращает
self

См. определение в файле csvfile.php строка 132

133  {
134  $this->bomMark = $mark;
135 
136  return $this;
137  }

◆ setWidthMap()

setWidthMap (   $mapFields)

Sets up fields widths.

Аргументы
int[]$mapFieldsFields widths.
Возвращает
self

См. определение в файле csvfile.php строка 259

260  {
261  $this->widthMap = array();
262  for ($i = 0, $n = count($mapFields); $i < $n; $i++)
263  {
264  $this->widthMap[$i] = (int)$mapFields[$i];
265  }
266 
267  return $this;
268  }

Поля

◆ $bomMark

$bomMark = self::BOM_TYPE_UTF8
protected

См. определение в файле csvfile.php строка 39

◆ $fieldDelimiter

$fieldDelimiter = self::DELIMITER_TZP
protected

См. определение в файле csvfile.php строка 30

◆ $fieldsType

$fieldsType = self::FIELDS_TYPE_WITH_DELIMITER
protected

См. определение в файле csvfile.php строка 18

◆ $firstHeader

$firstHeader = false
protected

См. определение в файле csvfile.php строка 66

◆ $hasBom

$hasBom = false
protected

См. определение в файле csvfile.php строка 45

◆ $rowDelimiter

$rowDelimiter = self::LINE_DELIMITER_WIN
protected

См. определение в файле csvfile.php строка 54

◆ $widthMap

$widthMap = array()
protected

См. определение в файле csvfile.php строка 60

◆ BOM_TYPE_UTF8

const BOM_TYPE_UTF8 = "\xEF\xBB\xBF"

См. определение в файле csvfile.php строка 33

◆ DELIMITER_SPS

const DELIMITER_SPS = ' '

См. определение в файле csvfile.php строка 23

◆ DELIMITER_TAB

const DELIMITER_TAB = "\t"

См. определение в файле csvfile.php строка 21

◆ DELIMITER_TZP

const DELIMITER_TZP = ';'

См. определение в файле csvfile.php строка 24

◆ DELIMITER_ZPT

const DELIMITER_ZPT = ','

См. определение в файле csvfile.php строка 22

◆ FIELDS_TYPE_FIXED_WIDTH

const FIELDS_TYPE_FIXED_WIDTH = 'F'

См. определение в файле csvfile.php строка 10

◆ FIELDS_TYPE_WITH_DELIMITER

const FIELDS_TYPE_WITH_DELIMITER = 'R'

См. определение в файле csvfile.php строка 12

◆ LINE_DELIMITER_UNIX

const LINE_DELIMITER_UNIX = "\r"

См. определение в файле csvfile.php строка 48

◆ LINE_DELIMITER_WIN

const LINE_DELIMITER_WIN = "\r\n"

См. определение в файле csvfile.php строка 47


Объявления и описания членов класса находятся в файле:
Bitrix\Translate\CsvFile\$fieldsType
$fieldsType
Definition: csvfile.php:18
Bitrix\Translate\CsvFile\$firstHeader
$firstHeader
Definition: csvfile.php:66
Bitrix\Main\IO\File\seek
seek($position)
Seeks on the file pointer from the beginning (SEEK_SET only).
Definition: main/lib/io/file.php:140
Bitrix\Main\IO\File\isExists
isExists()
Definition: main/lib/io/file.php:51
Bitrix\Translate\CsvFile\fetchDelimiter
fetchDelimiter()
Fetches data row as delimited columns.
Definition: csvfile.php:275
Bitrix\Translate\CsvFile\incrementCurrentPosition
incrementCurrentPosition()
Moves reading position and reads file into buffer.
Definition: csvfile.php:466
Bitrix\Translate\CsvFile\$hasBom
$hasBom
Definition: csvfile.php:45
Bitrix\Main\IO\File\isReadable
isReadable()
Definition: main/lib/io/file.php:180
Bitrix\Translate\CsvFile\$fieldDelimiter
$fieldDelimiter
Definition: csvfile.php:30
Bitrix\Translate\CsvFile\FIELDS_TYPE_FIXED_WIDTH
const FIELDS_TYPE_FIXED_WIDTH
Definition: csvfile.php:10
Bitrix\Translate\CsvFile\$rowDelimiter
$rowDelimiter
Definition: csvfile.php:54
Bitrix\Main\IO\File\getSize
getSize()
Returns the file size.
Definition: main/lib/io/file.php:86
Bitrix\Translate\CsvFile\setPos
setPos($position=0)
Sets new reading position.
Definition: csvfile.php:505
Bitrix\Translate\CsvFile\checkUtf8Bom
checkUtf8Bom()
Check UTF-8 Byte-Order Mark.
Definition: csvfile.php:167
Bitrix\Translate\CsvFile\fetchWidth
fetchWidth()
Fetches data row as fixed width columns.
Definition: csvfile.php:366
Bitrix\Translate\CsvFile\FIELDS_TYPE_WITH_DELIMITER
const FIELDS_TYPE_WITH_DELIMITER
Definition: csvfile.php:12
Bitrix\Main\Text\BinaryString\getLength
static getLength($str)
Binary version of strlen.
Definition: binarystring.php:17