标签: fputcsv

强制fputcsv为*all*字段使用Enclosure

当我使用fputcsv写一行到打开的文件句柄时,PHP会将一个封闭的字符添加到它认为需要的任何列,但是会留下没有这些外壳的其他列.

例如,您最终可能会得到这样的一行

11,"Bob ",Jenkins,"200 main st. USA ",etc
Run Code Online (Sandbox Code Playgroud)

如果没有将虚假空间附加到每个字段的末尾,是否有任何方法可以强制fputcsv始终用外壳包含列(默认为")"字符?

php csv fputcsv

37
推荐指数
3
解决办法
3万
查看次数

fputcsv和换行符代码

我在PHP中使用fputcsv输出数据库查询的逗号分隔文件.在Ubuntu中打开gedit中的文件时,它看起来是正确的 - 每个记录都有一个换行符(没有可见的换行符,但你可以告诉每个记录是分开的,在OpenOffice电子表格中打开它可以让我正确地查看文件.)

但是,我们将这些文件发送到Windows上的客户端,并且在他们的系统上,该文件作为一个很长的行.在Excel中打开它,根本无法识别多行.

我在这里读了几个非常相似的问题,包括这个问题,其中包含一个真正信息丰富的Great Newline Schism解释的链接.

不幸的是,我们不能告诉客户在"更智能"的编辑器中打开文件.他们需要能够在Excel中打开它们.是否有任何编程方式来确保添加正确的换行符,以便可以在任何操作系统上的电子表格程序中打开该文件?

我已经在使用自定义函数强制所有值的引号,因为fputcsv对它有选择性.我尝试过这样的事情:

function my_fputcsv($handle, $fieldsarray, $delimiter = "~", $enclosure ='"'){

        $glue = $enclosure . $delimiter . $enclosure;

    return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure."\r\n");

}
Run Code Online (Sandbox Code Playgroud)

但是,当在Windows文本编辑器中打开文件时,它仍然显示为单个长行.

php newline fputcsv

28
推荐指数
4
解决办法
3万
查看次数

是否有可以用PHP编写RFC 4180 CSV文件的库?

我知道fputcsv,但根据这个"wontfix"错误, fputcsv没有正确地转义输入,并且出于兼容性原因,它的行为将不会被修复.我更喜欢符合RFC 4180的实现,因此Excel和LibreOffice可以在所有情况下打开它.

我已经尝试使用谷歌搜索正确执行此操作的库,但似乎没有就一个体面的第三方库达成共识,而是通常建议有缺陷的fputcsv.我总是可以自己动手,但是如果可能的话,我宁愿不重新发明轮子.

php csv fputcsv rfc4180

27
推荐指数
1
解决办法
5666
查看次数

使用fputcsv时,请避免使用csv文件中的默认引号

使用fputcsv避免来自csv的默认引号

fputcsv($fp, $array, ',', '"'); // OR fputcsv($fp, $array);
Run Code Online (Sandbox Code Playgroud)

在test.csv中

testname,045645765789,"""04.07.2012 12:10:52"""
Run Code Online (Sandbox Code Playgroud)

如何避免上面的报价?

如下

testname,045645765789,04.07.2012 12:10:52
Run Code Online (Sandbox Code Playgroud)

php fputcsv

15
推荐指数
1
解决办法
3万
查看次数

fputcsv和整数typcasting到字符串

所以我有一行我想要做一个有一些整数的fputcsv(我需要将它视为字符串,但它们是数字).当我执行fputcsv时,这些整数有前导零被切断,但我不希望这种情况发生,有什么方法可以解决这个问题吗?我尝试将typcasting作为(字符串)并将我的变量放在引号中,但到目前为止我找到的唯一方法就是在整个数字周围加上引号,这样当我打开它时,引号就会显示在csv文件中excel,我不想发生.有没有人知道如何使这个工作?我认为fputcsv只是出于某种原因自动为这个变量赋值,并使它成为一个整数或者其他东西......

编辑示例文本:

我fputcsv:

02305109
Run Code Online (Sandbox Code Playgroud)

我在excel中打开的csv文件中得到了什么:

2305109
Run Code Online (Sandbox Code Playgroud)

但是当我只使用vi打开所说的csv文件时,前导零仍然存在.真奇怪.

php csv excel fputcsv

13
推荐指数
3
解决办法
1万
查看次数

php fputcsv和封闭字段

我正要问与此处讨论的问题相同的问题.... 强制fputcsv使用Enclosure for*all*Fields

问题是

当我使用fputcsv写一行到打开的文件句柄时,PHP会将一个封闭的字符添加到它认为需要的任何列,但是会留下没有这些外壳的其他列.

例如,您最终可能会得到这样的一行

11,"Bob",Jenkins,"200 main st.USA"等

如果没有将虚假空间附加到每个字段的末尾,是否有任何方法可以强制fputcsv始终用外壳包含列(默认为")"字符?

答案是:

不,fputcsv()仅在以下条件下包含该字段

/* enclose a field that contains a delimiter, an enclosure character, or a newline */
if (FPUTCSV_FLD_CHK(delimiter) ||
  FPUTCSV_FLD_CHK(enclosure) ||
  FPUTCSV_FLD_CHK(escape_char) ||
  FPUTCSV_FLD_CHK('\n') ||
  FPUTCSV_FLD_CHK('\r') ||
  FPUTCSV_FLD_CHK('\t') ||
  FPUTCSV_FLD_CHK(' ')
)
Run Code Online (Sandbox Code Playgroud)

没有"永远封闭"选项.

我需要创建一个CSV文件将每个字段封闭...什么是最好的解决方案?

提前致谢...

php csv fputcsv

8
推荐指数
1
解决办法
1万
查看次数

PHP中的fputcsv不会写入文件

我已经搜索和搜索并进行了大量的调试,因为我的生活无法弄清楚为什么fputcsv不能为我工作.

我可以成功打开.csv文件并写入它.

我的调试证明数组已正确加载,并且foreach循环正常工作.但是,fputcsv函数根本无法写入任何内容.我删除了所有可能导致URL等问题的字符串,但它仍然无法写入.

我是唯一可以访问此环境的人,所以我知道它不是文件锁冲突.我可以创建文件并写入它,所以我知道它不是权限问题.而且,我从foreach循环得到调试输出,所以我知道它不是数组或循环的问题.

我将在下面提供我的代码和调试日志......

$posts_meta = array(
    'twitter_title'       => $this_title,
    'twitter_brandtag'    => $this_brandtag,
    'twitter_hashtags'    => $this_hashtags,
    'twitter_iterations'  => $this_iteration,
    'twitter_timing'      => $this_timing,
    'twitter_time'        => $this_time,
    'twitter_id'          => $post_id,
 );

// Debuging
file_put_contents("/blog/debug.txt", "About to write CSV file.\n", FILE_APPEND);
file_put_contents("/blog/debug.txt", print_r($posts_meta, true)."\n", FILE_APPEND);

$myfile = fopen('/blog/pdm_twitter_ouptut.csv', 'a+');

// More debugin
file_put_contents("/blog/debug.txt", "myfile handle = ".$myfile."\n", FILE_APPEND);
fwrite($myfile, "This file is open and working.\r\n");

foreach ($posts_meta as $fields){
    $fresponse = fputcsv($myfile, $fields);

    // A little more debugging...
    file_put_contents("/blog/debug.txt", $fields."\n", FILE_APPEND);
} …
Run Code Online (Sandbox Code Playgroud)

php fputcsv

6
推荐指数
1
解决办法
8642
查看次数

什么样的错误将"错误"设置为非零?为什么fopen()设置"errno"而fputc()没有?

什么样的库函数会对errno产生什么样的错误并将其设置为非零值?在我的下面的程序中,我打算用if(errno!=0)一个条件来检查我使用的库函数是否正常运行,这就是我找到的(参见下面的代码):

首先我用来if(errno!=0)测试文件是否已成功打开fopen().如果我尝试打开一个不存在的文件,则errno设置为非零(在我的情况下为2),并通过打印errno每个阶段的值来验证它.但是,如果我打开现有文件,则errno的值保持为零,因为fopen()正确打开文件.在这件事上,if(errno!=0)作为if(pFile==NULL)我所评论的完美替代品.

如果文件成功打开,errno静止0,则控件移动到第一个else块.这是我发现关于行为的混淆的地方errno.在这里,由于我已经在r(读)模式下打开文件并尝试使用它来写入fputc(),我希望得到的写错误设置errno为非零,就像fopen()它无法成功打开文件时设置的那样.但errno即使在写入失败后,该值仍然为零fputc().(这可以通过errno错误写入后的打印值来验证).

为什么会这样?为什么一个函数fopen()设置了I/O错误设置errno其他函数所面临的while写错误fputc()不影响errno?如果是这样,我们怎样才能可靠地errno用作错误指标?我是否使用errno来测试fopen()是否成功运行,而不是"if(pFile == NULL)"不明智?我将非常感谢您对此的分析答案.

#include <stdio.h>
#include <errno.h>

int main ()
{

  FILE * pFile;
  printf("%d\n",errno);

  pFile = fopen("D:\\decrypt.txt","r");
  printf("%d\n",errno); // Prints 0 if …
Run Code Online (Sandbox Code Playgroud)

c fopen errno fputcsv

6
推荐指数
1
解决办法
4976
查看次数

使用fputcsv将BOM添加到CSV文件

我生成了一个包含外来字符的简单CSV文件.我已经注意到,如果我没有包含字节顺序标记,外国字符在Excel中没有正确显示(但是当存在BOM时它们看起来很好).

如何在首次创建文件时将BOM添加到文件的开头?我尝试了以下内容并且无法正常工作: - /

function processForm($competition, $competitionEntry) {
    $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM

    $filename = $competition->ID.".csv";
    $file = "entries/".$filename;     

    $fields = array_keys($competitionEntry);
    $submittedForm = $competitionEntry;

    if(file_exists($file)) {
        $fp = fopen($file, 'a');
        if($fp && 
            fputcsv($fp, $submittedForm) && 
            fclose($fp)) {
            return true;
        } 
    } else { // CREATE NEW FILE
        $fp = fopen($file, 'w');
        if($fp && 
            fputcsv($fp, $BOM) && // WRITE BOM TO FILE   
            fputcsv($fp, $fields) &&
            fputcsv($fp, $submittedForm) &&
            fclose($fp)) {     
            return true;
        } 
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

php csv excel byte-order-mark fputcsv

5
推荐指数
1
解决办法
8681
查看次数

删除 CSV 中的第一行,然后保存文件并覆盖现有的

我有一个动态生成的 CSV 文件。我想删除 CSV 的第一行,然后再次保存。

我已经用谷歌搜索并能够获得 csv 的第一行,但删除后再次写入的部分是我陷入困境的地方。

这是例子

line1,data1
line2,data2
line3,data3
Run Code Online (Sandbox Code Playgroud)

我想要达到的目标

line2,data2
line3,data3
Run Code Online (Sandbox Code Playgroud)

即删除第一行并再次保存文件

这是我的代码

$file = fopen('words.csv', 'r');
$data = fgetcsv($file,10000,",");
$data = array_shift($data);
$file = fopen('words.csv', 'w');
fputcsv($file,$data,",");
fclose($file);
Run Code Online (Sandbox Code Playgroud)

我得到这个: ! ) Warning: fputcsv() expects parameter 2 to be array, string given in C:\wamp\www\scrape\test.php on line7

并且输出文件为空。

艾哈迈尔

php csv fgetcsv fputcsv

5
推荐指数
1
解决办法
9845
查看次数

标签 统计

fputcsv ×10

php ×9

csv ×6

excel ×2

byte-order-mark ×1

c ×1

errno ×1

fgetcsv ×1

fopen ×1

newline ×1

rfc4180 ×1