Как лучше всего читать текстовый файл с разделителями табуляции в C # - PullRequest
9 голосов
/ 27 января 2010

У нас есть текстовый файл с примерно 100 000 строк, около 50 столбцов на строку, большая часть данных довольно мала (от 5 до 10 символов или цифр).

Это довольно простая задача, но просто интересно, как лучше импортировать эти данные в структуру данных C # (например, DataTable)?

Ответы [ 6 ]

9 голосов
/ 27 января 2010

Я бы прочитал его как CSV с разделителями столбцов табуляции:

Быстрый считыватель CSV

Edit:
Вот простой пример того, что вам нужно:

DataTable dt = new DataTable();
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) {
    dt.Load(csv);
}

Где CSV_FULLNAME - полный путь + имя файла CSV с разделителями табуляции.

3 голосов
/ 27 января 2010

Используйте встроенный анализатор текста .NET. Он бесплатный, имеет отличную обработку ошибок и имеет дело со множеством странных шаровых случаев.

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(VS.80).aspx

1 голос
/ 27 января 2010

Что касается FileHelpers , вы можете определить вкладку как разделитель. Перейдите на этот сайт по предоставленной ссылке и попробуйте.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 27 января 2010

Простой, но не обязательно отличный способ:

  • Считать файл с помощью программы чтения текста в строку

  • Используйте String.Split для получения строк

  • использовать String.Split с символом табуляции для получения значений поля

0 голосов
/ 27 января 2010

Несмотря на то, что вы анализируете линии, убедитесь, что вы используете что-то, что поддерживает перемотку и перемотку, являясь источником данных вашей сетки данных. Вы не хотите сначала загружать все в память? Как насчет того, чтобы в следующий раз количество данных было в десять раз больше? Сделайте что-нибудь, что использует file.seek в глубине души, сначала не читайте все в память. Это мой совет.

0 голосов
/ 27 января 2010

Два варианта:

  1. Используйте классы в пространстве имен System.Data.OleDb. Это имеет преимущество чтения непосредственно в таблицу данных, как вы просили, с очень небольшим количеством кода, но это может быть сложно сделать правильно, потому что это табуляция, а не запятая.
  2. Используйте или напишите парсер CSV. Убедитесь, что это анализатор на основе конечного автомата, например, связанный с @Jay Riggs, а не анализатор на основе String.Split (). Это должно быть быстрее, чем метод OleDb, но он даст вам список или массив, а не данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...