拆分前检查并删除 csv 文件中的逗号

Check and remove comma from csv file before splitting

我正在尝试读取某个 csv 文件并将其上传到我的数据库中,其中包含用户选择的某些数据。假设数据包含姓名、年龄和身高。问题是名称中包含逗号 (,).

示例:

马克·史密斯 20 170

因为系统会认为这是另一个字段,所以会拆分。下面是我正在使用的代码,我需要过滤这个逗号并在拆分成不同的列之前将其删除。

openFileDialog1.ShowDialog();
            var fileName = string.Format(openFileDialog1.FileName);

            StreamReader sr = new StreamReader(fileName);
            string line = sr.ReadLine();
            string[] value = line.Split(',');
            DataTable dt = new DataTable();
            DataRow row;
            foreach (string dc in value)
            {
                dt.Columns.Add(new DataColumn(dc));
            }

            while (!sr.EndOfStream)
            {
                value = sr.ReadLine().Split(',');
                Name cl = new Name();
                try
                {
                    cl.Name= value[0].Trim('"');
                    cl.Age= value[1].Trim('"');
                    cl.Height= value[2].Trim('"');

new Data().addPerson(cl);
}

这是我拼凑的一个快速而肮脏的解决方案。使用正则表达式可能有更优雅的解决方案。但是,嘿,它有效...

using System.Text;

var line = "\"Mark, Fenech\", \"20\", \"170\"";

public static string RemoveColumnDelimitersInsideValues(string input) {

    const char valueDelimiter = '"';
    const char columnDelimiter = ',';

    StringBuilder output = new StringBuilder();

    bool isInsideValue = false;
    for (var i = 0; i < input.Length; i++) {
        var currentChar = input[i];

        if (currentChar == valueDelimiter) {
            isInsideValue = !isInsideValue;
            output.Append(currentChar);
            continue;
        }

        if (currentChar != columnDelimiter || !isInsideValue) {
            output.Append(currentChar);
        }
        // else ignore columnDelimiter inside value
    }
    return output.ToString();
}

.Net Fiddle