Самый простой способ работы со списком через запятую - PullRequest
2 голосов
/ 17 октября 2010

Я собираюсь найти решение, чтобы каждый вечер получать список через запятую.Это список из примерно 14000 строк, и мне нужно пройти по списку и выбрать некоторые значения в списке.Документ, который я получаю, содержит около 50 значений, разделенных точкой с запятой для каждого «случая».Структура документа:

""; "2010-10-17"; ""; ""; ""; Period-Last24h ";" Проблема в том, что клиент не может найти .... "и т. д., с еще 43 точками с запятой. И каждое «дело» заканчивается значением «Всего 515»;

Что мне нужно сделать, это пройти через все эти «дела» и вывести некоторые значенияв «случаях». «случаи» всегда создаются в одном и том же порядке, и я знаю, что всегда нужно выводить 3, 15 и 45-ю точку с запятой.

Как мне это сделать?это проще всего?

Ответы [ 5 ]

2 голосов
/ 17 октября 2010

Предполагая, что "строки" являются строками и что вы читаете построчно, ваш основной инструмент должен быть строковым.любой столбец может содержать ';'

2 голосов
/ 17 октября 2010

Я думаю, вы должны разложить эту проблему на более мелкие.Вот шаги, которые я бы предпринял:

  1. Каждая запись, разделенная точкой с запятой, представляет один объект.C # является объектно-ориентированным языком.Перестаньте думать с точки зрения записей .csv и начните думать с точки зрения объектов.Разбейте входные данные на записи, разделенные точкой с запятой.
  2. При наличии одной записи через запятую значения представляют свойства вашего объекта.Дайте им значимые имена.
  3. Разобрать разделенную запятыми запись в объекте.Когда вы закончите, у вас будет коллекция объектов, с которыми вы можете иметь дело.
  4. Используйте коллекции C # и LINQ для фильтрации вашего списка на основе тех случаев, которые вам нужно отозвать.Когда вы закончите, у вас будет коллекция объектов с удаленными нужными случаями.

Не беспокойтесь о «простейшем» способе.Вам нужен один способ, который работает.Что бы вы ни делали, заставьте что-то работать и позаботьтесь об оптимизации, чтобы потом было проще, быстрее, меньше и т. Д.

1 голос
/ 17 октября 2010

Вы можете использовать String.Split дважды.

Первый раз с использованием «Всего 515»; в качестве разделенной строки используется , эта перегрузка . Это даст вам множество случаев.

Второй раз используя ";" в качестве символа разделения используется , эта перегрузка в каждом из случаев. Это даст вам массив данных для каждого случая. Поскольку данные согласованы, вы можете извлечь 3 rd , 15 th и 45 th элементов этого массива.

0 голосов
/ 17 октября 2010

Простой, но медленный подход - это чтение отдельных символов из ввода (например, StringReader класс).Напишите метод ReadItem, который читает кавычку, продолжает читать до следующей кавычки, а затем ищет следующий символ.Если это новая точка с запятой, один элемент был прочитан.Если это другая цитата, добавьте одну цитату к прочитанному элементу.В противном случае выведите исключение.Затем используйте этот метод, чтобы разделить входные данные на серии элементов, каждая строка которых сохраняется, например, в string[number of items in a row], строки хранятся в List<>.Затем вы можете использовать этот класс для чтения данных CSV внутри другого класса, который декодирует данные, считанные в объекты, из которых вы можете получить свои данные.

0 голосов
/ 17 октября 2010

Я бы искал существующую библиотеку CSV. Правила выхода, вероятно, не так легко сопоставить с регулярным выражением.

Если бы сам писал библиотеку, я бы сначала проанализировал каждую строку в списке / массиве строк. А затем на втором этапе (возможно, за пределами самой библиотеки CSV) преобразуйте список строк в строго типизированный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...