【发布时间】:2017-07-24 20:37:13
【问题描述】:
我需要检测 csv 文件中的行尾类型:
-
\n(UNIX 默认) -
\r(Mac Excel) -
\r\n(Windows) - 或其他任何东西
为了获得分隔符、包围和转义字符,我使用了SplFileObject::getCsvControl - 如果有类似的东西作为行尾字符,那就太好了。
打开文件
【问题讨论】:
-
一般情况下 - 你无法检测到它,例如文件可能有混合行结尾,你真正的问题是什么?
-
不确定所有函数都使用它,但是:
ini_set("auto_detect_line_endings", true);至于SplFileObject::getCsvControl,请注意,此函数不会神奇地从给定文件中猜测 CSV 控件,而是返回具有之前已使用 SplFileObject::setCsvControl() 设置。 -
@IlyaBursov 我需要使用 LOAD DATA INFILE 将 csv 导入我的 MySQL 数据库,但该查询必须明确定义行尾字符。
-
我会将带有
\r\n的文件标准化为\n,然后您根本不需要为LOAD DATA INFILE 指定LINES TERMINATED BY。假设大文件并希望避免 PHP 中的迭代 - 也许使用 d2u/dos2unix。否则一些 perl/sed/tr 等应该可以工作。 -
顺便说一句,因为很多人都不知道:mysql 有一个内置的 csv-storage-engine。因此在某些用例中,您可以跳过 LOAD DATA INFILE 并将文件复制到某些位置(是的 db 目录中的链接有效)dev.mysql.com/doc/refman/5.7/en/csv-storage-engine.html
标签: php csv line-endings