我正在寻找关于如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且可能在值中有逗号,如公司名称。
我们正在考虑的一些想法是:带引号的标识符(value "," values ","等等)或使用|代替逗号。最大的问题是我们必须让它变得简单,否则客户就不会这么做。
我正在寻找关于如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且可能在值中有逗号,如公司名称。
我们正在考虑的一些想法是:带引号的标识符(value "," values ","等等)或使用|代替逗号。最大的问题是我们必须让它变得简单,否则客户就不会这么做。
当前回答
一个示例可能有助于说明如何在.csv文件中显示逗号。创建一个简单的文本文件,如下所示:
将此文本文件另存为后缀为“。csv”的文本文件,在Windows 10下使用Excel 2000打开。
aa、bb、cc, d, d "在电子表格演示中,下面的行应该看起来像上面的行,只是下面在d之间显示了一个逗号而不是分号。" aa,bb,cc,"d,d",即使在Excel中也适用
aa,bb,cc,"d,d",即使在Excel 2000中也是如此 aa,bb,cc,"d,d",即使在Excel 2000中也是如此 aa,bb,cc,"d, d",即使在Excel 2000中也是如此
aa,bb,cc, " d,d",这在Excel 2000中失败,因为在第一个引用之前有空格 aa,bb,cc, " d,d",这在Excel 2000中失败,因为在第一个引用之前有空格 aa,bb,cc, " d, d",这在Excel 2000中失败,因为在第一个引用之前有空格
aa,bb,cc,"d,d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。 aa,bb,cc,"d,d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。 aa,bb,cc,"d, d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。
规则:如果你想在csv文件的单元格(字段)中显示一个逗号: 用双引号开始和结束字段,但避免在第一个引号之前有空格
其他回答
一个示例可能有助于说明如何在.csv文件中显示逗号。创建一个简单的文本文件,如下所示:
将此文本文件另存为后缀为“。csv”的文本文件,在Windows 10下使用Excel 2000打开。
aa、bb、cc, d, d "在电子表格演示中,下面的行应该看起来像上面的行,只是下面在d之间显示了一个逗号而不是分号。" aa,bb,cc,"d,d",即使在Excel中也适用
aa,bb,cc,"d,d",即使在Excel 2000中也是如此 aa,bb,cc,"d,d",即使在Excel 2000中也是如此 aa,bb,cc,"d, d",即使在Excel 2000中也是如此
aa,bb,cc, " d,d",这在Excel 2000中失败,因为在第一个引用之前有空格 aa,bb,cc, " d,d",这在Excel 2000中失败,因为在第一个引用之前有空格 aa,bb,cc, " d, d",这在Excel 2000中失败,因为在第一个引用之前有空格
aa,bb,cc,"d,d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。 aa,bb,cc,"d,d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。 aa,bb,cc,"d, d ",即使在Excel 2000中,即使在第2个引号前后有空格,这也是有效的。
规则:如果你想在csv文件的单元格(字段)中显示一个逗号: 用双引号开始和结束字段,但避免在第一个引号之前有空格
在字符串周围加双引号。这就是Excel所做的。
阿拉伊莱,
将双引号转义为2 双引号。如。 “test1”、“foo”“酒吧”,“test2”
有一个可以通过nuget来处理几乎任何格式良好的CSV (.net)的库——CsvHelper
映射到类的示例:
var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>();
读取单个字段的示例:
var csv = new CsvReader( textReader );
while( csv.Read() )
{
var intField = csv.GetField<int>( 0 );
var stringField = csv.GetField<string>( 1 );
var boolField = csv.GetField<bool>( "HeaderName" );
}
让客户端驱动文件格式: ,是标准字段分隔符,”是用于转义包含分隔符、引号或行尾的字段的标准值。
使用(例如)#表示字段,'表示转义:
var csv = new CsvReader( textReader );
csv.Configuration.Delimiter = "#";
csv.Configuration.Quote = ''';
// read the file however meets your needs
更多的文档
public static IEnumerable<string> LineSplitter(this string line, char
separator, char skip = '"')
{
var fieldStart = 0;
for (var i = 0; i < line.Length; i++)
{
if (line[i] == separator)
{
yield return line.Substring(fieldStart, i - fieldStart);
fieldStart = i + 1;
}
else if (i == line.Length - 1)
{
yield return line.Substring(fieldStart, i - fieldStart + 1);
fieldStart = i + 1;
}
if (line[i] == '"')
for (i++; i < line.Length && line[i] != skip; i++) { }
}
if (line[line.Length - 1] == separator)
{
yield return string.Empty;
}
}
我使用Csvreader库,但通过使用它,我从列值中的逗号(,)爆炸获得数据。
所以如果你想要插入CSV文件数据,其中包含逗号(,)的大部分列值,你可以使用下面的函数。 作者链接=> https://gist.github.com/jaywilliams/385876
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}