我有一个非常大的数据文件,大约有 60000 行。我需要将基于列的 CSV 文件拆分为每列的不同数组。
我有 5 列;State, County, Zipcode, Latitude, Longitude
.
当我读取文件时,我将如何拆分它并将它们按顺序添加到每个数组中?
我会有一个State, County, Zipcode, Latitude
, 和的数组Longitude
。
使用 CSV 解析器 - .NET 有很多,甚至是命名空间中的内置解析器VisualBasic
。
看TextFieldParser
- 虽然在VisualBasic
命名空间中,它是一个常规的 .NET 库,可以被任何 .NET 语言使用。
如果您想手动执行(我也建议使用TextFieldParser
),您可以使用 aStreamReader
循环所有行并使用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]);
}
}
如果你真的需要一个数组而不是一个列表:
String[] states = stateList.ToArray();
String[] counties = countyList.ToArray();
String[] zipCodes = zipCodeList.ToArray();
String[] latitudes = latitudeList.ToArray();
String[] longitudes = longitudeList.ToArray();