У нас есть текстовый файл приблизительно с 100 000 строк, приблизительно 50 столбцов за строку, большинство данных является довольно маленьким (5 - 10 символов или числа).
Это - довольно простая задача, но просто задающийся вопросом, что лучший способ состоял бы в том, чтобы импортировать эти данные в структуру данных C# (например, DataTable)?
Вы можете выбрать шестиугольники по одному, используя соответствующую функцию оценки, чтобы выбрать лучший из шести еще не выбранных соседних шестиугольников в шестнадцать, выбранных в предыдущем раунде. Я думаю, что функция оценки, которая работает, заключается в выборе ближайшего к (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- Строковый литерал:
Таким образом, наш regex:
r"'(''|[^'])*'"
-121--3549674- Я бы прочитал его в виде CSV с разделителями столбцов табуляции:
Правка:
Вот пример barebones того, что вам нужно:
DataTable dt = new DataTable();
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) {
dt.Load(csv);
}
где CSV_FULLNAME - полный путь + fil
Однако вы анализуете линии, убедитесь, что вы используете что-то, что поддерживает переадресацию и перемотка, являясь источником данных вашей сетки данных. Сначала вы не хотите загружать все в память, вы? Как насчет того, чтобы объем данных должен быть в десять раз в следующий раз? Сделайте что-то, что использует File.Seek Deep Down, сначала не читайте в памяти. Это мой совет.
Просто, но не обязательно отличный способ:
Прочитайте файл с помощью текста считывателя в строку
Использовать string.split, чтобы получить строки
. Разделить с помощью символа вкладок, чтобы получить значения поля
Используйте встроенный текстовый парсер .NET. Он бесплатный, обладает отличной обработкой ошибок и имеет дело с множеством странных случаев.
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(VS.80 ).aspx
Что касается FileHelpers, можно определить вкладку как разделитель. Перейдя на этот сайт по предоставленной ссылке, вы получите подсказку.
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Два варианта:
System.Data.OleDb
. Преимущество этого метода заключается в том, что он позволяет читать данные напрямую, как вы просили с очень небольшим количеством кода, но это может быть сложно, потому что это табуляция, а не разделенные запятыми.