生成CSV时,防止CSV文件中的逗号定义新列

生成CSV时,防止CSV文件中的逗号定义新列,csv,Csv,示例$this->生成_csv=“12000” 不是在一列中插入12000,而是在第一列中插入12,在第二列中插入000 如何解决这个问题(php)如果您引用字段,那就是读取程序的错误 但看起来你没有引用字段 允许CSV文件中有一行,如: "A","12,000","C" 是3个字段,而不是4个字段。请注意,字段被引用 A,12,000,C 是4个字段,字段1为A,字段2为12,字段3为000,字段4为C。阅读程序无法以其他方式阅读此内容。。。它不能读心 但是,许多程序无法处理字段中带有逗

示例$this->生成_csv=“12000”

不是在一列中插入12000,而是在第一列中插入12,在第二列中插入000


如何解决这个问题(php)

如果您引用字段,那就是读取程序的错误

但看起来你没有引用字段

允许CSV文件中有一行,如:

"A","12,000","C" 
是3个字段,而不是4个字段。请注意,字段被引用

A,12,000,C
是4个字段,字段1为
A
,字段2为
12
,字段3为
000
,字段4为
C
。阅读程序无法以其他方式阅读此内容。。。它不能读心

但是,许多程序无法处理字段中带有逗号的CSV文件,即使字段被正确引用,以便它们可能包含逗号。更令人困惑的是,许多程序可以设置为按逗号拆分,而不是按照RFC4180进行读取。逗号拆分不足以读取完整的RFC4180 CSV格式

话虽如此,这里还有另一个问题:
12000
在Python、Javascript、R和许多语言中都不是有效的数字,因此即使程序使用了良好的RFC4180读取器(例如Python中的
csv
模块),将
12000
更改为数字仍然会失败

因此,可能需要删除引号字段中数字之间的逗号

在您的例子中,由于您是在PHP中生成CSV文件,只需 尝试以下两种方法:

备选方案A:引用字段

$this->generating_csv = '"12,000"'.','.'"field2"'
这将导致输出中出现

备选方案B:生成不带额外逗号的字段:

$this->generating_csv = "12000".","."field2"
如果已经有多个CSV文件在引号字段中带有逗号,并且读取程序无法正确读取它们,则可以使用regexp搜索/替换以清除逗号。在Python中,以下内容将清除CSV文件中的逗号:

import csv
import sys
import re
infile = open(sys.argv[1],'r')
outfile = open(sys.argv[2],'w')
csvin = csv.reader(infile)
csvout = csv.writer(outfile, quoting=csv.QUOTE_ALL)
for rowin in csvin:
    rowout = []
    for origfield in rowin:
        field = origfield[1:-1] if origfield[0:1]=='"' else origfield
        # change 10,000 to 10000
        field = re.sub(r'(\d+),(\d+)', r'\1\2', field)
        # change Cleveland, OH to Cleveland OH
        field = field.replace(r',',r' ')
        rowout.append(field)
    csvout.writerow(rowout)

用另一个不分隔的字符替换
。尝试添加反斜杠?说真的,你甚至没有说你使用的是什么语言,那么我们怎么知道呢?这就是CSV的意思-逗号分隔的值