juanparati / csvreader
一个轻量级/快速的CSV读取器,适用于非常大的文件。
1.0
2018-09-30 08:50 UTC
Requires
- php: >=7.0.1
- ext-mbstring: *
Requires (Dev)
- ext-json: *
- phpunit/phpunit: ~7.2.0
This package is not auto-updated.
Last update: 2024-09-21 11:11:21 UTC
README
关于
CSVReader是一个轻量级且快速的PHP 7.x CSV读取库,适用于大文件。
CSVReader是为了业务和电子商务环境开发的,在这些环境中,可能包含损坏数据的CSV大文件可以导入。
功能
- 易于使用。
- 小内存占用(以流的形式读取文件,因此所需的内存很少)。
- 读取不同编码的文件。
- 基于字符串和数字引用的标题列映射。
- 自动列映射。
- 支持不同的十进制分隔符(欧洲逗号 ",", 英国点 ".")。
- 类型转换。
- 货币检查(避免错误解释损坏或错误的货币值)。
- 检测并忽略空行。
- 根据列值提取词段。
- 根据列值删除词。
- 替换列值。
- 基于正则表达式排除值。
备注
- 不支持带有BOM的UTF-16
用法
自定义字段映射(适用于带有标题的CSV)
$csv = new \Juanparati\CSVReader\CSVReader(
'file.csv', // File path
';', // Column delimiter
'"', // Text enclosure
'UTF-8', // Charset
',', // Decimal separator
'\\' // Escape character
);
// Define a custom map
$csv->setMapField([
'name' => ['column' => 'Firstname'],
'price' => ['column' => 'Retailprice'],
],
0 // Define where the head line. Default: 0 (first line)
);
// Extract rows sequentially
while ($row = $csv->readCSVLine())
{
echo 'Name: ' . $row['name'];
echo 'Price: ' . $row['price'];
}
自定义字段映射(适用于不带标题的CSV)
$csv = new \Juanparati\CSVReader\CSVReader(
'file.csv', // File path
';' // Column delimiter
);
// Define a custom map
$csv->setMapField([
'name' => ['column' => 0],
'price' => ['column' => 3],
]);
// Extract rows sequentially
while ($row = $csv->readLine())
{
echo 'Name: ' . $row['name'];
echo 'Price: ' . $row['price'];
}
自动字段映射
$csv = new \Juanparati\CSVReader\CSVReader(
'file.csv', // File path
';' // Column delimiter
);
// Define a custom map
$csv->setAutomaticMapField();
// Extract rows sequentially
while ($row = $csv->readCSVLine())
{
echo 'Firstname: ' . $row['Firstname'];
echo 'Retailprice: ' . $row['Retailprice'];
}
列分隔符
分隔符设置为字符串或常量表示。
可以使用所有类型的分隔符,因此不仅限于列举的分隔符。
字符串封装
当CSV中的字符串未用任何类型的字符封装时,使用封装节点。
十进制分隔符
列转换
可以使用cast属性对列进行转换。
// Define a custom map
$csv->setMapField([
'price' => ['column' => 'Retailprice', 'cast' => 'float'],
]);
可用的转换类型有
- int
- integer(int的别名)
- float
- string
从列中删除字符
有时需要在特定列中删除某些字符。
// Define a custom map
$csv->setMapField([
'price' => ['column' => 'Retailprice', 'cast' => 'float', 'remove' => ['EUR', '€']
]);
替换列中的字符
// Replace "Mr." by "Señor"
$csv->setMapField([
'name' => ['column' => 'Firstname', 'replace' => ['Mr.' => 'Señor']
]);
排除标志
有时根据列数据标记行是方便的。
// Exclude all names that equal to John
$csv->setMapField([
'name' => ['column' => 'Firstname', 'exclude' => ['John']
]);
在此,每当列"名称"中有单词"John"时,虚拟列"排除"将包含值"true"(布尔值)。
排除参数接受正则表达式。
应用流过滤器
$csv = new \Juanparati\CSVReader\CSVReader('file.csv');
$csv->applyStreamFilter('zlib.deflate')
文件信息
可以通过调用"tellPosition"方法来获取当前指针位置的字节数。为了获取文件状态,调用"info"方法将返回文件状态(请参阅https://php.ac.cn/manual/en/function.fstat.php)。
$csv = new \Juanparati\CSVReader\CSVReader('file.csv');
echo 'Current byte position ' . $csv->tellPosition() . ' of ' . $csv->info()['size'];