mbarquin/import-export-legacy

辅助程序,用于将csv和固定行文件读取到命名和验证后的数组中,或将数组导出为csv或固定行文件。它使用iconv来更改数据编码。

v1.0.0 2016-04-06 05:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:42:09 UTC


README

介绍

这是一个用于导入大型csv或固定行文件的库,它只需要一个索引数组和文件路径,对象本身是可迭代的,在每次循环中,它返回一个与读取行号对应的索引和一个以索引数组形式的数据数组,如果出现问题,它将返回一个异常。

安装

您可以通过以下方式安装组件

用法

    $defArray = array (
        'name'    => 20,
        'surname' => 20,
        'phone'   => 10
    );

    $oImport = new mbarquin\LegacyFile\Import('./files/contacts.csv', $defArray);

    $oImport->setIsPseudoCSV(TRUE);

    foreach ($oImport as $line => $data) {
        // This is also a valid check.
        // if(is_a($data, 'Exception') === true)

        if (is_a($data, 'mbarquin\LegacyFile\ImportException') === true) {
            // Error handling
        }

    }

首先,类需要一个索引定义,它是一个字段名作为索引的数组,在CSV情况下,值是一个整数,表示最大数据长度,在固定行情况下,它是要读取的字段长度。在这个例子中,它被称为defArray。

FileImport类默认配置为读取固定行导入文件,如果我们想改变这种行为,我们必须使用这个方法setIsPseudoCSV(TRUE|FALSE)将CSV导入文件设置为true。

我们还需要一个要读取的文件,我们可以使用绝对或相对路径,如果文件不存在或出现问题,将引发异常。

对象在许多情况下抛出错误,但数据大小验证或固定行错误不会抛出,它们作为ImportException对象返回,错误处理取决于您,是否中断或继续其余的文件导入,这可以通过setReturnValidationExceptions(TRUE|FALSE)方法进行配置。

    $oImport = new mbarquin\LegacyFile\Import('./files/contacts.csv', $defArray);
    $oImport->setReturnValidationExceptions(FALSE);
    try {
        foreach ($oImport as $line => $data) {

        }
    } catch(\Exception $e) {
        // Error handling.
    }

如果导入的文件使用另一种编码,该类可以通过iconv进行转码。类有三个编码字面量常量,Import::UTF8 Import::LATIN1和Import::WINDOWS_OCCI,任何编码iconv字面量都将被接受,因为iconv命令将编码文本。使用setTranscodification($from, $to)设置转码。

    $oImport = new mbarquin\LegacyFile\Import('./files/contacts.csv', $defArray);
    $oImport->setTranscodification(
        mbarquin\LegacyFile\Import::WINDOWS_OCCI, mbarquin\LegacyFile\Import::UTF8
    );

如果开启调试模式,设置Debug(TRUE|FALSE),Import对象将在每个迭代中跟踪最大内存消耗。这个库只使用必要的内存来保存从处理文件中读取的最后一条记录。当读取新行时,旧行将从内存中删除。

这些信息存储在私有属性中,可以使用以下方式访问

getMaxRealMemoryUsage()
getMaxInternalMemoryUsage()

最大内存检查,这些属性也通过setMaxMemoryUsage()方法调用。

如果存在名为"ENV"的环境变量,其值为"development"或"local"模式,则构造时将开启调试。

默认fgetCSV分隔符是;,封装"和转义\,这些都是默认值,它们可以通过setCsvDefaults($csvSeparator = ";", $enclosure = '"', $escape = '\')进行更改,并通过getCsvDefaults()验证,它返回一个包含这些索引的数组,分隔符,封装和转义。