繁体   English   中英

可以使用什么分隔符。csv 列中有“,”

[英]What delimiter can be used for .csv that has “,” in it's column

我想读取.csv 文件并写入 other.csv 文件。 我使用streamwriter并将string.splitdelimiter (',')一起使用。

 using (StreamWriter file = new StreamWriter(destFile, true))
            {
                  string lines = System.IO.File.ReadAllLines(inputFile);
                  foreach (string line in lines)
                    {
                        if (line != lines[0])
                        {  
                            string[] values = line.Split(',');
                            file.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}",
                                    values[43], values[0], values[11], values[12], values[13], values[15], values[14], values[28], values[22], values[9]);
 }}}

但是,在它的data中很少有列,如下所示,因此产生incorrect output因为程序将其计为delimiter

在此处输入图像描述

我试过使用tinyCSVParser库,但它也使用分隔符,这会产生相同的结果。 当我更改为CSVHelper库时,它不使用分隔符,但因为输入文件有名为public double B/S的列,因此我卡在那里,因为属性不能接受该名称。

[Name("B/S")]
private double p = 0;
public double B/S
{
    get
    {
        return p;
    }
    set
    {
        double result;
        result = double.Parse(Principal) * value / Day / 100;
        p = Math.Abs(result);
    }
}

我应该用什么替换delimiter

我建议您使用 CSV 库来编写 csv 文件。 但是您可以在定义RFC-4180中查看如何格式化 csv 。

  1. 每个字段都可以用双引号括起来,也可以不用双引号(但是某些程序,例如 Microsoft Excel,根本不使用双引号)。 如果字段没有用双引号括起来,则双引号可能不会出现在字段内。

如果我很理解你...

尝试这个:

using (StreamWriter file = new StreamWriter(destFile, true))     
{
    string lines = System.IO.File.ReadAllLines(inputFile);
    foreach (string line in lines)
    {
        string[] delimiter = line==lines[0] ? new string[]{","} : new string[]{"\",\"", "\""};
        string[] values = line.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
        //...
    }
}

编辑

看看这个: .NET 小提琴

注意:如果要通过引号分割字符串,则需要在字符串中使用反斜杠。 请参阅: 如何:将引号放在字符串中(Windows 窗体)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM