CSV文件输出的问题

liangpei2008 2012-07-03 07:03:29
我要输出一个标准的CSV文件格式,数据项要加双引号。我用以下程序实现:
<?php
$teststr='wwwnnn';
$list = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
$teststr
);
$fp = fopen('c:\file.csv', 'w');
fputcsv($fp, $list,',','"');
fclose($fp);
?>
当前输出是
"aaa,bbb,ccc,dddd","123,456,789",wwwnnn

我想输出
"aaa,bbb,ccc,dddd","123,456,789","wwwnnn"
请问,如何做?
分不够,请说句话,诚心请教,谢谢大家了。
...全文
149 点赞 收藏 12
写回复
12 条回复
浮华out 2012年07月03日
这意思?
$teststr1='wwwnnn';
$list1 = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
$teststr1
);
$teststr2='www nnn';
$list2 = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
$teststr2
);
function str_pos_format($teststr,$list){
$pos1 = strpos($teststr, " ");
$pos2 = strpos($teststr, ",");

if($pos1 === false && $pos2 === false)
$format = '"%s","%s",%s';
else
$format = '"%s","%s","%s"';

return $format;
}
printf(str_pos_format($teststr1,$list1), $list1[0], $list1[1], $list1[2]);
#"aaa,bbb,ccc,dddd","123,456,789",wwwnnn
echo "<br>";
printf(str_pos_format($teststr2,$list2), $list2[0], $list2[1], $list2[2]);
#"aaa,bbb,ccc,dddd","123,456,789","www nnn"

回复 点赞
kyzy_yy_pm 2012年07月03日
'\"'.$teststr.'\"'
回复 点赞
kyzy_yy_pm 2012年07月03日
'\"wwwnnn\"'
回复 点赞
liangpei2008 2012年07月03日
我的问题的关键点在于fputcsv函数,当数据项中无空格或逗号时,就会不带引号,而不是问大家如何给一个常量加引号
回复 点赞
浮华out 2012年07月03日
抱歉,#5发的信息与要求有出入,这样:

$list = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
'wwwnnn'
);
$format = '"%s","%s","%s"';
printf($format, $list[0], $list[1], $list[2]);
#"aaa,bbb,ccc,dddd","123,456,789","wwwnnn"

回复 点赞
浮华out 2012年07月03日

#用sscanf()函数试试
<?php
// get author info and generate DocBook entry
$auth = "24\tLewis Carroll";
$n = sscanf($auth, "%d\t%s %s", $id, $first, $last);
echo "<author id='$id'>
<firstname>$first</firstname>
<surname>$last</surname>
</author>\n";
?>
#将$n写入文件即可
回复 点赞
码无边 2012年07月03日
//$teststr='wwwnnn';
$list = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
'wwwnnn'
);
回复 点赞
liangpei2008 2012年07月03日
写错了
通过我的分析,发现,只要数据项没有特殊字符(空格或逗号),fputcsv函数就不会输出双引号。请问大家,有什么方法可以规避这种情况吗
回复 点赞
liangpei2008 2012年07月03日
通过我的分析,发现,只要数据项没有特殊字符(空格或逗号),fputcsv函数就不会输出空格。请问大家,有什么方法可以规避这种情况吗
回复 点赞
liangpei2008 2012年07月03日
特请xuzuning等PHP前辈指点一下,多谢了
回复 点赞
qq120848369 2012年07月03日
楼主的需求和csv还是差了不少的,多简单的一个问题,非得csv,人家csv的行为可不仅仅这么一点噢。

[User:root Time:06:29:17 Path:/home/liangdong/php]$ cat test.txt
"aaa,bbb,ccc,dddd","123,456,789","wwwnnn"
[User:root Time:06:29:19 Path:/home/liangdong/php]$ cat arr.php
<?php
$teststr = 'wwwnnn';
$list = array(
'aaa,bbb,ccc,dddd',
'123,456,789',
$teststr
);
$fp = fopen("test.txt", 'w');
output_data($fp, $list);
fclose($fp);

// user-defined
function output_data($handle, $field) {
$cnt = count($field);
for ($ndx = 0; $ndx != $cnt; ++ $ndx) {
fprintf($handle, '"%s"', $field[$ndx]);
if ($ndx != $cnt - 1) {
fputs($handle, ",");
}
}
fputs($handle, "\n");
}
?>
回复 点赞
蹲坑看月亮 2012年07月03日
你们理解错了
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9733

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告