Files
php-doc-ru/reference/filesystem/functions/fgetcsv.xml
Sergey Panteleev 6d43fd64d7 Исправление форматирования
[skip-spellcheck]
[skip-lint]
2022-12-27 03:42:36 +03:00

212 lines
8.3 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: 34e2e3541c52edc9f60a1ad9735b1f769254eb1e Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.fgetcsv" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>fgetcsv</refname>
<refpurpose>Читает строку из файла и производит разбор данных CSV</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>array</type><type>false</type></type><methodname>fgetcsv</methodname>
<methodparam><type>resource</type><parameter>stream</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>length</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>separator</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>stream</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 или &null;, начиная с PHP 8.0.0) приведёт к
тому, что длина строки будет не ограничена. Это может сказаться на скорости выполнения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>separator</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>separator</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>
Возвращает индексированный массив с прочтёнными полями в случае успешного выполнения&return.falseforfailure;.
</para>
<note>
<para>
Пустая строка CSV-файла будет возвращена в качестве массива,
содержащего единственный элемент <type>null</type>, ошибки
в данном случае не возникнет.
</para>
</note>
&note.line-endings;
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
Параметр <parameter>length</parameter> теперь допускает значение &null;.
</entry>
</row>
<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
-->