2013-09-20 4 views
2

Поэтому у меня есть этот CSV файл, где это содержимое как так ...Расщепление на »в строке

"Name","Age","Gender","City, State" 

До сих пор я был успешным при удалении двойные кавычки везде - за исключением первые и последние записи с помощью следующего кода

using (StreamReader reader = new StreamReader(outputReport)) 
{ 
    headers = reader.ReadLine().Split(new string[] { "\",\"" }, 
       StringSplitOptions.RemoveEmptyEntries); 
} 

Это приводит массив строк с содержимым:.

\"Name 
Age 
Gender 
City, State\" 

Я сделал несколько попыток, чтобы удалить \"

включая добавление этого к моим расщепленных критериям:

String.Concat('\\','\"') 

И это:

"\\\"" 

Но ничто, кажется, работает, я чувствую как я должен уметь их удалить в методе Split. Это своего рода сложная строка. Есть идеи? Спасибо за помощь!

+0

Где вы видите '\" '? Я подозреваю, что вы видите его в отладчике, а это значит, что обратная косая черта на самом деле не существует ... –

+0

Поскольку каждая запись уже уже является двойным кавычком - для сохранения запятых внутри отдельных записей. –

+1

Он раскалывается на ",". Вы можете разделить на оба и «и» и удалить пустые записи при использовании Regex. –

ответ

8

Не используйте String.Split() для чтения данных CSV!

Слишком много краевых случаев. Ты только что нажал на вершину айсберга. Кроме того, он намного медленнее, чем нужно. Вам нужен выделенный синтаксический анализатор CSV. Есть один встроенный в каркас (Microsoft.VisualBasic.FileIO.TextFieldParser), и есть несколько, которые вы можете скачать и использовать, включая FastCSV и мои собственные EasyCSV.

+0

Благодарим вас за предупреждение. Я рад, что мне сказали, что это считается плохой практикой, прежде чем она станет плохой привычкой. Кстати, это в пространстве имен Microsoft.VisualBasic.FileIO. –

1

попробуйте следующее: s.Replace(@""",","~").Replace(@"""","~").Split('~'); где s - это строковое значение строки csv, прочитанной.

+1

RegEx является излишним для чего-то подобного и совершенно неуместным, когда дело доходит до разбора CSV-файла, IMO. – Tim

+1

@ Тим: понимай Тим, но моя идея заключалась в том, чтобы дать рабочее решение, используя аналогичный подход, который использовал Дерек, так как он попросил решение получить его текущий код/​​подход. но да, должно было бы предложить лучший вариант, отличный от нынешнего подхода. последует за этим советом в следующий раз. – LearningNeverEnds

1

Вы можете разделить символами "(двойной qoute),«(запятая) и/(косая черта) Попробуйте это:.

 using (StreamReader reader = new StreamReader(outputReport)) 
     { 
      char [] splitByCharSet = new char[3]{'\"', '\\', ','}; 
      headers = reader.ReadLine().Split(splitByCharSet, StringSplitOptions.RemoveEmptyEntries); 
     } 
Смежные вопросы