【问题标题】:How to detect delimiter in temporary file?如何检测临时文件中的分隔符?
【发布时间】:2015-12-24 17:21:10
【问题描述】:

CSV 文件上传,并在服务器的 /tmp 文件夹中保存为 .tmp 文件。遇到问题来获取它的分隔符。它可以是“;”或者 ','。我如何从 .t​​mp 文件中检查这个?据我了解,它不能用 tmp 文件完成,所以我需要将其保存为 .csv,然后检查分隔符。这是唯一的方法吗?

【问题讨论】:

  • 不是分隔符的字符可以在字符串里面吗?
  • 你的意思是';'和','作为字符串?如果是,那么只有这些字符可以出现在字符串中
  • 您可以对 .tmp 文件以及任何其他扩展名执行任何操作,前提是其内容是正确的 CSV。您只需要完整的文件名即可打开它。
  • 假设; 是分隔符。那么您的文件是否有可能包含以下内容:val1,something;val2val1,something 应该被检测为 one 值?
  • @MrPixelDream,在我的情况下它不可能

标签: php file-upload phpexcel delimiter tmp


【解决方案1】:

与其重新发明轮子,不如重复使用现有的编写良好、经过良好测试的代码包......例如来自The League of Extraordinary Packages 的“CSV”。 CSV 不仅在处理 CSV 文件方面有很多好处,它还具有确定 CSV 文件中使用的分隔符的功能。例如:

use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/your/csv/file.csv');
$reader->setEnclosure('"');
$reader->setEscape('\\');
$delimiters_list = $reader->fetchDelimitersOccurrence([',',';','|'], 10);

这将查看 .csv 文件的前 10 行并计算找到的分隔符的出现次数。如果$delimiters_list[','=>40, ';'=>0, '|'=>0],那么您知道它是一个始终使用, 作为其分隔符的CSV 文件。

其他 CSV 包可以在 Packagist.org 中找到 HERE

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2016-05-31
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2013-09-07
    • 2011-05-02
    相关资源
    最近更新 更多