【问题标题】:fgetcsv - Add Quotes to fields that do not have quotesfgetcsv - 将引号添加到没有引号的字段
【发布时间】:2010-01-13 21:32:35
【问题描述】:

当我使用以下方法解析它时,我有一个文本文件(它的逗号用双引号括起来的一些字段分隔):

if (($handle = fopen('C:\tester\fake.txt', "r")) !== FALSE) {
    while (($data = fgetcsv($handle, ",")) !== FALSE) {
        $num = count($data);
        //echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

显示每个字段没有引号,fgetcsv会自动删除吗?

如何让它显示没有引号的字段并为其添加引号然后保存文件?可能吗?

谢谢大家

更新

我刚刚尝试了 fputcsv,我发现写入的文件在字段周围没有引号,只有很少,比初始文件少!我做错了什么?

$row = 1;
$newfile = fopen('C:\new-file.txt', "w");

if (($handle = fopen('C:\fake.txt', "r")) !== FALSE) {
    while (($data = fgetcsv($handle, ",")) !== FALSE) {
        $num = count($data);
            fputcsv($newfile, $data, ',', '"');
    }
    fclose($handle);
    fclose($newfile);
}

【问题讨论】:

标签: php csv text-files


【解决方案1】:

fgetcsv 确实删除了引号。

使用 fputcsv 你可以编写一个 cvs 文件。它确实有关于是否使用引号的选项,但它会对所有字段执行相同的操作。

检查http://www.php.net/fgetcsvhttp://www.php.net/fputcsv

【讨论】:

  • Jimmy 知道了,用 fgetcsv 读入你的文件,然后用 fputcsv 写回一个新版本,你应该有一个正确引用的文件。
  • 这是个好主意 - 但我希望先检查文本文件,因为有些可能已经正确格式化。
【解决方案2】:

引号是 CSV 文件格式的一部分(包含 或换行符的字段周围的引号),因此 fgetcvs 将(并且预计会)删除它们。

【讨论】:

  • 有没有其他方法可以解析这个并查看引号,以便我可以在没有引号的字段中添加引号?
  • 只需在所有字段中添加引号即可。你不会得到任何带有引号的字段。
  • 在使用 fgetcsv 提取后,所有字段都不会有引号,除非引号是原始字符串的一部分,并且假设在添加到 csv 文件之前已正确转义。当您将它们添加到文件时,请使用 fputcsv() 并让 php 进行引用。请参阅 Jimmy Shelter 的答案中的链接。如果您想检查或解析原始文件(“fake.txt”)中写入的行,请使用 file() 将它们放入数组中
【解决方案3】:

是的,它会删除引号,因为它假定您想要列的数据,而引号不是数据的一部分。请改用fget

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多