Что лучший способ состоит в том, чтобы считать файл разделенного текста вкладки в C#

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

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

9
задан alchemical 26 January 2010 в 22:41
поделиться

6 ответов

Вы можете выбрать шестиугольники по одному, используя соответствующую функцию оценки, чтобы выбрать лучший из шести еще не выбранных соседних шестиугольников в шестнадцать, выбранных в предыдущем раунде. Я думаю, что функция оценки, которая работает, заключается в выборе ближайшего к (0,0) (силы, выбирающие гексаны в одной «оболочке» за раз), разрыв связей путем выбора ближайшего к (1,0) (заставляет последовательное направление спирали в новой оболочке). Расстояние в шестнадцатеричной сетке может быть вычислено с помощью следующей функции:

double grid_distance(int dx, int dy) {
  double real_dx = dx + y/2.0;
  double real_dy = dy * sqrt(3)/2.0;
  return sqrt(real_dx * real_dx + real_dy * real_dy);
}
-121--4904063-

Строковый литерал:

  1. Открытая одинарная кавычка, за которой следует:
  2. Любое количество сдвоенных одинарных кавычек и не одинарных кавычек, затем
  3. Закрытая одинарная кавычка.

Таким образом, наш regex:

r"'(''|[^'])*'"
-121--3549674-

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

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

Правка:
Вот пример barebones того, что вам нужно:

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

где CSV_FULLNAME - полный путь + fil

9
ответ дан 4 December 2019 в 15:18
поделиться

Однако вы анализуете линии, убедитесь, что вы используете что-то, что поддерживает переадресацию и перемотка, являясь источником данных вашей сетки данных. Сначала вы не хотите загружать все в память, вы? Как насчет того, чтобы объем данных должен быть в десять раз в следующий раз? Сделайте что-то, что использует File.Seek Deep Down, сначала не читайте в памяти. Это мой совет.

0
ответ дан 4 December 2019 в 15:18
поделиться

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

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

  • Использовать string.split, чтобы получить строки

  • . Разделить с помощью символа вкладок, чтобы получить значения поля

0
ответ дан 4 December 2019 в 15:18
поделиться

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

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

3
ответ дан 4 December 2019 в 15:18
поделиться

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

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

1
ответ дан 4 December 2019 в 15:18
поделиться

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

  1. Использовать классы в пространстве имен System.Data.OleDb. Преимущество этого метода заключается в том, что он позволяет читать данные напрямую, как вы просили с очень небольшим количеством кода, но это может быть сложно, потому что это табуляция, а не разделенные запятыми.
  2. Используйте или напишите парсер csv. Убедитесь, что это государственный машинный парсер, как тот, с которым связан @Jay Riggs, а не парсер, основанный на String.Split(). Это должно быть быстрее, чем метод OleDb, но он даст вам список или массив, а не данные.
0
ответ дан 4 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

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