Files
php-doc-ru/reference/filesystem/functions/fgetcsv.xml
2021-01-03 21:01:46 +03:00

213 lines
8.2 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: be5b0f33a18415823da76389915b49aae4ee6835 Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fgetcsv">
<refnamediv>
<refname>fgetcsv</refname>
<refpurpose>Читает строку из файла и производит разбор данных CSV</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>fgetcsv</methodname>
<methodparam><type>resource</type><parameter>handle</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>length</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>delimiter</parameter><initializer>","</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>enclosure</parameter><initializer>'"'</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>escape</parameter><initializer>"\\"</initializer></methodparam>
</methodsynopsis>
<para>
Данная функция похожа на функцию <function>fgets</function>, с той
разницей, что она производит анализ строки на наличие записей
в формате <acronym>CSV</acronym> и возвращает найденные поля
в качестве массива.
</para>
<note>
<para>
Эта функция принимает во внимание настройки локали. К примеру,
если <literal>LANG</literal> установлена в <literal>en_US.UTF-8</literal>,
то файлы в однобайтовой кодировке будут неправильно прочитаны этой
функцией.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>handle</parameter></term>
<listitem>
<para>
Корректный файловый указатель на файл, успешно открытый при помощи
<function>fopen</function>, <function>popen</function> или
<function>fsockopen</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>length</parameter></term>
<listitem>
<para>
Должен быть больше самой длинной строки (в символах), найденной в CSV-файле
(включая завершающий символ конца строки). В противном случае, строка
будет разбита на куски длиной в <parameter>length</parameter> символов,
если только место разрыва не будет внутри ограничителей полей (enclosure).
</para>
<para>
Отсутствие этого параметра (или установка его в 0 в PHP 5.1.0 и выше) приведет к
тому, что длина строки будет не ограничена. Это может сказаться на скорости выполнения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>delimiter</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>delimiter</parameter> устанавливает
разделитель поля (только один символ).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>enclosure</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>enclosure</parameter> устанавливает
символ ограничителя поля (только один символ).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>escape</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>escape</parameter> устанавливает
экранирующий символ (минимум один символ).
Пустая строка (<literal>""</literal>) отключает проприетарный механизм экранирования.
</para>
<note>
<simpara>
Обычно символ <parameter>enclosure</parameter> экранируется внутри поля путем его удваивания; однако, символ <parameter>escape</parameter>
в качестве альтернативы. Поэтому значения по умолчанию этих параметров <literal>""</literal> и <literal>\"</literal> имеют одинаковое значение. Помимо разрешения экранировать символ
<parameter>enclosure</parameter> символ
<parameter>escape</parameter> не имеет особого смысла; он даже не предназначен для самого экранирования.
</simpara>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает индексированный массив с прочтенными полями.
</para>
<note>
<para>
Пустая строка CSV-файла будет возвращена в качестве массива,
содержащего единственный элемент <type>null</type>, ошибки
в данном случае не возникнет.
</para>
</note>
&note.line-endings;
<para>
<function>fgetcsv</function> возвращает &null;, если передаётся неверный
параметр <parameter>handle</parameter> или &false; при других ошибках,
в том числе и при достижении конца файла.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.4.0</entry>
<entry>
Теперь параметр <parameter>escape</parameter> может принимать пустую строку для
отключения проприетарного механизма экранирования.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Чтение и вывод на экран содержимого CSV-файла</title>
<programlisting role="php">
<![CDATA[
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num полей в строке $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>str_getcsv</function></member>
<member><function>explode</function></member>
<member><function>file</function></member>
<member><function>pack</function></member>
<member><function>fputcsv</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->