Как экспортировать строку с запятой в значении в CSV? - PullRequest
3 голосов
/ 21 марта 2011

Я экспортирую записи обзора данных в CSV-файл, используя код:

using (StreamWriter myFile = new StreamWriter(filename, false, Encoding.Default))
{
        string sHeaders = "";
        for (int j = 0; j < dGV.Columns.Count; j++)
        {
             if (dGV.Columns[j].Visible)
             {
                 sHeaders = sHeaders.ToString() + dGV.Columns[j].HeaderText + ", "; 
             }
        }
        myFile.WriteLine(sHeaders);
        // Export data.  
        for (int i = 0; i < dGV.RowCount; i++)
        {
             string stLine = "";
             for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
             {
                 if (dGV.Columns[j].Visible)
                 {
                     stLine = stLine.ToString() + dGV.Rows[i].Cells[j].Value.ToString() + ", ";
                 }
             }
                        myFile.WriteLine(stLine);
        }
     }
  }

Но проблема в том, что если значением в ячейке данных является Harikrishna, Daxini, то оно не будет экспортировано должным образом, потому что в значении ячейки есть запятая, но мне нужно включить запятую в значение. И он должен экспортироваться правильно. Как я могу это сделать ? Я попытался заключить это значение в двойные и одинарные кавычки, но оно не работает.

Ответы [ 2 ]

10 голосов
/ 21 марта 2011

Пробелы между разделяющими запятыми и открывающей двойной кавычкой могут вызвать проблемы с CSV.Замените код как "val1", "val2" в вашем CSV-файле на "val1","val2".Это должно исправить вашу проблему.

3 голосов
/ 21 марта 2011

Значения, содержащие ',', должны быть экранированы двойными кавычками.

         for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
         {
             if (dGV.Columns[j].Visible)
             {
                  var value = dGV.Rows[i].Cells[j].Value.ToString();
                  var append = value.Contains(",")
                                 ? string.Format("\"{0}\"", value)
                                 : value;
                  stLine = string.Format("{0}{1},", stLine, append) ;
             }
         }
...