我需要读取一个CSV文件并将它们拆分为每列的不同数组

时间:2012-06-23 20:47:01

标签: c# windows csv

我有一个非常大的数据文件,大约有60000行。我需要将基于列的CSV文件拆分为每列的不同数组。

我有5列; State, County, Zipcode, Latitude, Longitude

当我读取文件时,我将如何拆分它并将它们添加到每个数组中?

我会为State, County, Zipcode, LatitudeLongitude添加一个数组。

2 个答案:

答案 0 :(得分:2)

使用CSV解析器 - .NET有很多,甚至是VisualBasic命名空间中内置的。

请参阅TextFieldParser - 尽管在VisualBasic命名空间中,它是一个可供任何.NET语言使用的常规.NET库。

many other options

答案 1 :(得分:0)

如果您想手动执行此操作(我还建议您使用TextFieldParser),您可以使用StreamReader循环所有行,并使用String.Split按分隔符进行拆分(假设逗号):

var stateList = new List<String>();
var countyList = new List<String>();
var zipCodeList = new List<String>();
var latitudeList = new List<String>();
var longitudeList = new List<String>();

using (var reader = new System.IO.StreamReader(@"C:\Temp\csv.txt"))
{
    string line;
    while ((line = r.ReadLine()) != null)
    {
        var fields = line.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        stateList.Add(fields[0]);
        if (fields.Length > 1)
            countyList.Add(fields[1]);
        if (fields.Length > 2)
            zipCodeList.Add(fields[2]);
        if (fields.Length > 3)
            latitudeList.Add(fields[3]);
        if (fields.Length > 4)
            longitudeList.Add(fields[4]);
    }
}

如果你真的需要一个数组而不是一个List:

String[] states = stateList.ToArray();
String[] counties = countyList.ToArray();
String[] zipCodes = zipCodeList.ToArray();
String[] latitudes = latitudeList.ToArray();
String[] longitudes = longitudeList.ToArray();