CSV изменить разделитель

1

Я читаю CSV файл и изменяю разделитель от "," до "|". Однако я заметил в своих данных (которых я не контролирую), что в некоторых случаях у меня есть некоторые данные, которые не хотят следовать этому правилу и содержат в них данные с запятой. Мне интересно, как лучше не заменять эти исключения?

Например:

ABSON TE, Wick Lane, "Abson, Pucklechurch", Bristol, Avon, ENGLAND, BS16 9SD, 37030,17563, BS0001A1,

Должно быть изменено на:

ABSON TE | Wick Lane | "Abson, Pucklechurch" | Bristol | Avon | ENGLAND | BS16 9SD | 37030 | 17563 | BS0001A1 ||

Код для чтения и замены CSV файла следующий:

var contents = File.ReadAllText(filePath).Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToArray();
var formattedContents = contents.Select(line => line.Replace(',', '|'));
  • 1
    тогда не используйте строковую операцию. разобрать CSV обратно в отдельные поля данных, а затем создать новый CSV с нуля.
  • 0
    Если вы действительно хотите использовать строковые операции, посмотрите регулярное выражение в этом ответе
Показать ещё 2 комментария
Теги:
asp.net-mvc-4
.net-4.5

1 ответ

2
Лучший ответ

Для всех, кто с этим справляется, я закончил использование встроенного парсера.net csv. См. Здесь более подробную информацию и пример: http://coding.abel.nu/2012/06/built-in-net-csv-parser/

Мой специальный код:

 // Create new parser object and setup parameters
var parser = new TextFieldParser(new StringReader(File.ReadAllText(filePath)))
{
    HasFieldsEnclosedInQuotes = true,
    Delimiters = new string[] { "," },
    TrimWhiteSpace = true
};

var csvSplitList = new List<string>();

// Reads all fields on the current line of the CSV file and returns as a string array
// Joins each field together with new delimiter "|"
while (!parser.EndOfData)
{
    csvSplitList.Add(String.Join("|", parser.ReadFields()));
}

// Newline characters added to each line and flattens List<string> into single string
var formattedCsvToSave = String.Join(Environment.NewLine, csvSplitList.Select(x => x));

// Write single string to file
File.WriteAllText(filePathFormatted, formattedCsvToSave);
parser.Close();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню