Перебирайте файлы и читайте записи - PullRequest
0 голосов
/ 01 марта 2010

Какой самый быстрый путь к следующему в C # 3.5:

  1. Перебирать файлы в каталоге
  2. Считать записи файла (фиксированная длина 247 символов)
  3. Преобразование строки фиксированной длины каждой записи в структуру или класс.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 марта 2010

пользовательский класс для обработки файлов

   class customFile
        {
            string fileText;
            public string FileText
            {
                get { return fileText; }
                set { fileText = value; }
            }
        }

читать весь текст

        string[] filePaths = Directory.GetFiles(dirPath);
        List<customFile> customFiles = new List<customFile>();
        foreach (string file in filePaths)
        {
            customFiles.Add(new customFile { FileText = File.ReadAllText(file) });
        }
0 голосов
/ 01 марта 2010

Это было бы относительно быстро написать:

var myStructs = 
from file in Directory.GetFiles(".", "*.*", SearchOption.TopDirectoryOnly)
select ConvertFileToStructs(File.ReadAllText(file));

Если это самый быстрый способ, с точки зрения производительности? Наверное, нет, но это не будет иметь большого значения. На производительность будет влиять реализация десериализации в функции ConvertFileToStructs (). Но чтобы ответить на это, нам нужно знать конкретный формат ваших файлов.


Просто прочитайте ваши комментарии. Я бы предложил следующий разбор:

List<MyStruct> ConvertFileToStructs(string content, int[] mapping)
{
    var records = new List<MyStruct>();
    int length = content.Length();
    for(int i = 0; i < length; i += 247)
         records.Add(ConvertRecordToStruct(content.Substring(i,247), mapping));
    return records;
}

MyStruct ConvertRecordToStruct(string record, int[] mapping)
{
    MyStruct s;
    s.Field1 =  record.Substring(mapping[0], mapping[1]);
    //set other fields
    return s;
}

Этот код, вероятно, может быть оптимизирован для повышения производительности, но я не думаю, что он кардинально изменит ситуацию, особенно потому, что задействован ввод / вывод на диск и Substring () довольно быстрая (см. http://dotnetperls.com/substring). Конечно вам придется проверить это на своей машине.

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