Member 14941345 Ответов: 1

Как избежать запятой в csv-файле без использования двойных кавычек/" in C#


Я могу избежать запятой между строками с помощью двойных кавычек, таких как строки:"Лакшчаман","Бхарат","сатрудхан" был братом рама.Он отлично работает в csv-файле, но когда я копирую строку из ячейки csv в блокнот, она показывает ""Лакшаман"","Бхарат"","сатрудхан""был братом рама". Вот почему csv - файл не загружается в SQL. Я хочу, чтобы строка должна быть записана в csv-файл с запятой так же, как предложения в реальной форме.

Что я уже пробовал:

using (DataTable dt = new DataTable())
            {

                dt.Load(reader);
                Console.WriteLine(dt.Rows.Count);  //check its filled 
                StringBuilder sb = new StringBuilder();
                string sbb = "";
                sb.AppendLine(string.Join(",", dt.Columns.Cast<datacolumn>().Select(c => c.ColumnName)));
                sb.Remove(sb.Length - 1, 1);
                foreach (DataRow row in dt.Rows)
                {

                    for (int i = 0; i < dt.Columns.Count; i++)
                    {

                        if (row[i].ToString().Contains(","))
                        {

                            sb.Append(String.Format("\"{0}\",", row[i]));
                        }
                        else
                        {
                            sb.Append(row[i].ToString() + ",");
                        }

                    }



                    sb.AppendLine();

                }

                ArrayList ar = new ArrayList();


                File.WriteAllText(@"D:\ISR\1" + ".csv", sb.ToString());



            }

1 Ответов

Рейтинг:
2

OriginalGriff

В принципе, вы не можете делать то, что описываете.
Существует два формата CSV:
1) Базовый, где запятые разделяют данные столбца:

one column,another column,a final column

Эта версия не может содержать запятых в данных столбца, так как она всегда будет использоваться в качестве разделителя столбцов.
2) расширенный, где столбцы разделяют данные столбцов в двойных кавычках:
one column,"another column, which contains a comma",a final column

И их вполне можно перепутать.

Но если вам нужна двойная кавычка в столбце, вы должны ее экранировать, иначе она будет рассматриваться как конец столбца. CSV процессоры делают это путем удвоения двойных кавычек:
one column,"another column, which ""contains"" a comma",a final column
Итак, ваши данные Блокнота:
"""Laxchaman"",""Bharath"",""satrudhan"" was brother of Ram"
это правильно для одной строки одного столбца CSV-файла.

И это тот формат данных, который ожидает SQL.

Однако теперь ваш код будет генерировать плохой CSV-файл, в котором нет разрывов строк:
"Line 1", """double quoted"" text", Final column
Line 2, "text with a comma, this is allowed", 3
Это то, что вам нужно для нескольких строк.


Richard Deeming

"Nowever, ваш код будет генерировать плохой CSV в том, что нет разрывов строк:"
Разве это не то, что ... sb.AppendLine(); звонок-это для чего? :)

OriginalGriff

Я пропустил это - уровень кофе в моей крови, вероятно, был ниже минимального - но это все равно плохо CSV: слишком много запятых!