我正在使用fgetcsv
我的应用程序中读取csv文件.问题是,我不知道如果我的用户会使用,
,|
或;
作为分隔符.如果我什么fgetcsv
都不说它只会接受,,
但如果我告诉它使用特定的分隔符,它只接受它.
我现在正在做的是:
while (($row = fgetcsv($fileHandle, 4096)) !== false) {
Run Code Online (Sandbox Code Playgroud)
我想要的是这样的:
while (($row = fgetcsv($fileHandle, 4096, array(',', ';', '|'))) !== false) {
Run Code Online (Sandbox Code Playgroud)
这有可能以一些简单的方式吗?由于CSV不是标准化的,因此您必须将分隔符限制为一个特定字符,这似乎很奇怪.
如果您不知道,则无法可靠地确定csv文件的分隔符.举个简单的例子:
foo;bar,hello;world
Run Code Online (Sandbox Code Playgroud)
什么是分隔符?,
还是;
?如果您要传递一个数组array(',',';')
,您期望fgetcsv()
返回的数据是什么?
如果您不知道分隔符,则需要询问用户.
只是为了为其他遇到此问题的人提供一个简单的答案。我决定的解决方案是将所有分隔符替换为特定字符。像这样:
private function replaceDelimiters($file)
{
// Delimiters to be replaced: pipe, comma, semicolon, caret, tabs
$delimiters = array('|', ';', '^', "\t");
$delimiter = ',';
$str = file_get_contents($file);
$str = str_replace($delimiters, $delimiter, $str);
file_put_contents($file, $str);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这会将所有给定字符替换为“,”。因此,只有当您知道这些字符仅用作分隔符而不是内容时,这才是一个不错的选择。(就像我的例子一样)
还写了一篇关于它的博客文章。
归档时间: |
|
查看次数: |
131 次 |
最近记录: |