【问题标题】:PHP fgetcsv() delimiterPHP fgetcsv() 分隔符
【发布时间】:2012-08-22 14:27:15
【问题描述】:

关于fgetcsv()文档,fgetcsv()函数内部有一些参数:句柄、长度、分隔符、包围和转义。

现在,我有两个问题:

  1. 机柜的具体作用是什么?
  2. 我有一个每行 5 列的 csv 文件。想象它是这样的:1,2,3,4,5

所以索引是从 0 到 4。但是每当我想从索引 4 中获取日期时,就会返回一个空值。除非我在它后面加上一个逗号(通过在它后面填充一个额外的列,使内容如下: 1,2,3,4,5,6 )。我该如何解决这个问题? csv文件每行最后一项后缺少逗号,似乎有问题!

【问题讨论】:

  • 你能把 csv 文件粘贴到某个地方吗?也许向我们展示你的代码中一些相关的部分。

标签: php csv fgetcsv readfile


【解决方案1】:

1. enclosure 参数是封装特定字段或“索引”数据的字符。默认情况下,该参数为",这意味着您可以将字符串“包围”在" 字符中。

例子:

1,2,"this is three",4


2. 根据评论,您拨打的是fgetcsv($handle, 10000, ',')。您正在阅读的行可能超过 10000 个字符。尝试将长度更改为0,这将是“无限制”,看看是否有帮助。另一种解决方案是尝试将列的值用双引号括起来。

【讨论】:

  • 我使用while (($data = fgetcsv($handle, 10000, ',')) !== FALSE) { 读取行并获取它们的值,例如$title = $data[0];
【解决方案2】:

Enclosure 是 enclosure 字段的字符。它是一种额外的分隔符。

例如hello,world有一个逗号作为field分隔符,并且没有text分隔符,而"hello","world"有一个引号作为text强>分隔符。一些系统使用分隔值和非分隔值分别表示文本和数字字段(我相信 Microsoft Excel 会这样做)。这允许字段在其值中包含字段分隔符:

"Hello,world","Second Field","Third, and last, field".

其他一些系统只包含包含字段分隔符的值或包含空格的值,这意味着在这些系统上未分隔的值不一定是数字

如果您有一个“微不足道”的情况 - 未分隔的值,值内没有转义的字段分隔符(即,没有 'A,firstpartB\,secondpartB,C' 的东西) - 您可以完全跳过 CSV 转换并运行

  $line = fgets($file, MAX_EXPECTED_LINE_LEN);
  // This splits '  A, B, C ' into 'A', ' B' and ' C' (note spaces)
  $row = explode(',', trim($line)); // other delimiters can be used

  // Consider "  , ", "," and ", " as the same delimiter
  // i.e. ' Alpha , Beta   ,    Gamma  ' gets split into 'Alpha', 'Beta' and 'Gamma'
  $row = preg_split('#\\s*,\\s*#', trim($line));

我似乎无法重现您遇到的问题;是否与行尾的不同编码(即 CRLF 而不是 LF)有关?

在紧要关头,您可以将fgetcsv 划分为fgetsstr_getcsv() 两个组件,操纵调用之间的界限(使用trim,或者如果情况更糟,则通过附加缺失的逗号)。

【讨论】:

    【解决方案3】:

    这样对我有用:

    while ($row = $stmt -> fecht()){
         echo "\"";
         echo $row['email'];
         echo "\"";
         // Export every row to a file
         $arr = array(',');
         fputcsv($data, $arr, ";", '"' );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多