读取CSV文件?

时间:2017-08-07 10:18:59

标签: c# .net vb.net csv

我需要解析和分类非常大的CSV文件的数据。请注意文件大约600K行。我不需要将它存储在某个位置或导入到DB。请指导实施此实施的有效方法。感谢您的分享经历。

2 个答案:

答案 0 :(得分:1)

我会这样做......

var list = new List<float>(10000);
using (var fs = new StreamReader(new FileStream("file.csv", FileMode.Open, FileAccess.Read, FileShare.None, 8192, FileOptions.SequentialScan)))
{
    var line = fs.ReadLine();
    var columns = line.Split(',');
    list.Add(Convert.ToSingle(columns[5]));
}
// Sort the list and do your calculations...

注意FileOptions.SequentialScan,也可以使用bufferSize(不确定默认值是4096还是8192)来获得更好的结果...还要预先分配列表大小以防止调整大小列表...

答案 1 :(得分:1)

使用外部排序处理大文件排序的一种方法。有许多CSV库提供开箱即用的功能。

Cinchoo ETL具有CSVReader并具有外部排序功能。您可以将其用于您的目的

一个。定义POCO类以表示CSV记录。重要提示:将类标记为可序列化以符合外部排序的条件。

[Serializable]
public class Customer
{
    [ChoCSVRecordField(1)]
    [Key]
    public int Id { get; set; }
    [ChoCSVRecordField(2)]
    public string Street { get; set; }
    [ChoCSVRecordField(4)]
    public string City { get; set; }
    [ChoCSVRecordField(6)]
    public string Zip { get; set; }
}

湾编写比较器类以对列进行排序(例如,按城市排序)

public class AddressCityComparer : IComparer<Customer>
{
    public int Compare(Customer x, Customer y)
    {
        return String.Compare(x.City, y.City);
    }
}

℃。最后,使用ChoCSVReader加载CSV文件。将其传递给ExternalSorting方法以对其进行排序

foreach (var e in new ChoCSVReader<Customer>("Test.txt").WithDelimiter("\t").ExternalSort(new AddressCityComparer()))
    Console.WriteLine(e.City);

希望这有帮助。