Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导出到csv以忽略注释中的逗号和换行符_C#_Csv - Fatal编程技术网

C# 导出到csv以忽略注释中的逗号和换行符

C# 导出到csv以忽略注释中的逗号和换行符,c#,csv,C#,Csv,我有下面导出到csv的代码,但我刚刚意识到它不处理“comments”字段文本框中的逗号或换行符。有没有办法忽略某个字段或所有字段中的逗号和换行符 private void saveFileDialogTrack_FileOk(object sender, CancelEventArgs e) { StringBuilder str = new StringBuilder(); foreach (DataRow dr in this.trackDataSe

我有下面导出到csv的代码,但我刚刚意识到它不处理“comments”字段文本框中的逗号或换行符。有没有办法忽略某个字段或所有字段中的逗号和换行符

private void saveFileDialogTrack_FileOk(object sender, CancelEventArgs e)
    {
        StringBuilder str = new StringBuilder();
        foreach (DataRow dr in this.trackDataSet.Track)
        {
            foreach (object field in dr.ItemArray)
            {
                str.Append(field.ToString() + ",");
            }
            str.Replace(",", Environment.NewLine, str.Length - 1, 1);
        }
        string name = saveFileDialogTrack.FileName;
        try
        {
            System.IO.File.WriteAllText(name, str.ToString());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        str = null;
    }
样本csv前几个字段Barbagallo,31,39,51.01

        private void openFileDialogTrack_FileOk(object sender, CancelEventArgs e)
    {
        try
        {
            using (StreamReader SR = new StreamReader(openFileDialogTrack.FileName))
            {
                while (!SR.EndOfStream)
                {
                    var CSValues = SR.ReadLine().Split(',');

                    SqlCeConnection myConnection = new SqlCeConnection("Data Source = Track.sdf");
                    myConnection.Open();
                    String str = (@"INSERT INTO Track (Track, StartFinishLineNSDegrees, StartFinishLineNSMinutes, 

VALUES (@track, @SFNSD, @SFNSM,
                        SqlCeCommand cmd = new SqlCeCommand(str, myConnection);
                    cmd.Parameters.AddWithValue("@track", CSValues[0] == string.Empty ? (object)DBNull.Value : CSValues[0]);
                    cmd.Parameters.AddWithValue("@SFNSD", CSValues[1] == string.Empty ? (object)DBNull.Value : CSValues[1]);
                    cmd.Parameters.AddWithValue("@SFNSM", CSValues[2] == string.Empty ? (object)DBNull.Value : CSValues[2]);

VALUES (@track, @SFNSD, @SFNSM,
                        SqlCeCommand cmd = new SqlCeCommand(str, myConnection);
                    cmd.Parameters.AddWithValue("@track", CSValues[0] == string.Empty ? (object)DBNull.Value : CSValues[0]);
                    cmd.Parameters.AddWithValue("@SFNSD", CSValues[1] == string.Empty ? (object)DBNull.Value : CSValues[1]);
                    cmd.Parameters.AddWithValue("@SFNSM", CSValues[2] == string.Empty ? (object)DBNull.Value : CSValues[2]);
根据:

包含换行符、双引号和逗号的字段应包含在双引号中

为了安全起见,为了简化编码,您可以将所有字段用引号括起来

替换此项:

str.Append(field.ToString() + ",");
为此:

str.Append(string.Format("\"{0}\",", field));

在将字符串添加到stringbuilder之前,我创建了一个方法来添加引号中的文本(如果需要)

private string HandelQuote(string text)
        {
            if (string.IsNullOrEmpty(text)) return string.Empty;

            var containsQuote = text.Contains('"');
            var containsComma = text.Contains(',');
            var addQuote = containsComma || containsQuote;

            if (addQuote)
            {
                text = text.Replace("\"", "\"\"");
            }

            return addQuote ? "\"" + text + "\"" : text;
        }

那么进口产品会是什么样子呢?这就是我过去拥有的。。。var CSValues=SR.ReadLine.Split',';这两种情况下,第一个代码都会导出到csv,但仅以逗号分隔,不带双引号。第二个代码是导入函数,但它只处理逗号,不处理双引号。是的,这是正确的,它只是用户共享数据和备份数据的一种方式;如果文本被双引号括起来,streamreader是否关心文本是否打断到新行上?