Чтение больших CSV-файлов - PullRequest
       4

Чтение больших CSV-файлов

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

Какой самый эффективный способ чтения большого файла CSV в .NET?Используете FileStream?или другой класс?Спасибо!

Ответы [ 5 ]

3 голосов
/ 17 сентября 2010

Вы можете использовать StreamReader, возвращенное FileInfo.OpenText:

Dim file As New FileInfo("path\to\file")

Using reader As StreamReader = file.OpenText()
    While Not reader.EndOfStream
        Dim nextLine As String = reader.ReadLine()
        ProcessCsvLine(nextLine)
    End While
End Using
1 голос
/ 17 сентября 2010

У меня был очень хороший опыт работы с этой библиотекой:

http://www.codeproject.com/KB/database/CsvReader.aspx

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

Самый эффективный способ сделать это - воспользоваться отложенным выполнением в LINQ. Вы можете создать простую функцию Linq-To-Text, которая будет читать по одной строке за раз, работать над ней и затем продолжать. Это действительно полезно, так как файл очень большой.

Я бы воздержался от использования методов ReadBlock или ReadBlock или ReadToEnd класса StreamReader, поскольку они, как правило, читают сразу несколько строк или даже целые строки в файле. Это в итоге потребляет больше памяти, чем если бы строка читалась по одному за раз.

public static IEnumerable<string> Lines(this StreamReader source)
{
    String line;

    if (source == null)
        throw new ArgumentNullException("source");

    while ((line = source.ReadLine()) != null)
    {
        yield return line;
    }
}

Обратите внимание, что функция является методом расширения класса StreamReader. Это означает, что его можно использовать следующим образом:

class Program
{
   static void Main(string[] args)
   {
       using(StreamReader streamReader = new StreamReader("TextFile.txt"))
       {
            var tokens = from line in streamReader.Lines()
            let items = line.Split(',')               
            select String.Format("{0}{1}{2}",
                items[1].PadRight(16),
                items[2].PadRight(16),
                items[3].PadRight(16));

       }
   }
}
1 голос
/ 17 сентября 2010

Если вы хотите прочитать все это в память, простое File.ReadAllText() отлично подойдет.

РЕДАКТИРОВАТЬ: Если ваш файл действительно очень большой, вы можете использовать класс StreamReader, подробности см. здесь . Такой подход иногда неизбежен, но в основном его следует избегать по стилевым причинам. См. здесь для более углубленного обсуждения.

0 голосов
/ 19 февраля 2013

Я использую эту библиотеку для чтения CSV. Это действительно приятно использовать

http://www.codeproject.com/Articles/11698/A-Portable-and-Efficient-Generic-Parser-for-Flat-F

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