JohnnyGat
@JohnnyGat
Стараюсь писать код, понятный человеку.

Как распарсить такую строку?

У меня есть строка вида:
123,текст,текст с пробелами,"текст, еще и с запятыми","еще текст, еще с запятыми"

Нужно получить:
123
текст
текст с пробелами
текст, еще и с запятыми
еще текст, еще с запятыми

Если бы не запятые которые находятся в кавычках я бы использовал Split(',')
А что делать в таком случае?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Это CSV и уже есть готовые библиотеки, которые нормально обрабатывают кавычки.
Буквально так и называется библиотека: Csv и ещё есть CsvHelper
Вот пример, как использовать CsvHelper:
#r "nuget:CsvHelper"

using CsvHelper;
var text = "123,текст,текст с пробелами,\"текст, еще и с запятыми\",\"еще текст, еще с запятыми\"";

var parserOptions = new CsvHelper.CsvParserOptions { Delimiter = ',' };
var readerOptions = new CsvHelper.CsvReaderOptions { HasHeaderRecord = false };

using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(text)))
using (var stringReader = new StreamReader(memoryStream))
using (var csvParser = new CsvParser(stringReader, parserOptions))
using (var csvReader = new CsvReader(csvParser, readerOptions))
{
    while (csvReader.Read())
    {
        Console.WriteLine(csvReader.GetField(0));
        Console.WriteLine(csvReader.GetField(1));
        Console.WriteLine(csvReader.GetField(2));
        Console.WriteLine(csvReader.GetField(3));
        Console.WriteLine(csvReader.GetField(4));
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Перебираем символы: находим запятую - делим; находим кавычки - игнорируем запятые до следующей кавычки.
Ответ написан
Комментировать
2ord
@2ord
Не нужно мудрить и изобретать велосипед. Такой формат строки называется CSV. Наверняка в шарпах есть готовые инструменты для работы с CSV.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы