CSV asp.net C#上的字符串拆分

时间:2015-11-03 07:18:23

标签: c# asp.net csv reader

A574A02211 S193FDRA3 20141023S17337 WAN HAI 307

A024A13787 S1023F S1023F WAN HAI 316

A574A02181 S187FDRA3 20141024S17337 WAN HAI 307

我有一个像上面那样的csv文件,但是,

nextCellPlace = FindNextCell(data[dataCounter], spacePlace);
spacePlace = data[dataCounter].IndexOf(" ", nextCellPlace);
arrivalShip.Add(GetCellValue(data[dataCounter], nextCellPlace, spacePlace));enter

即时通讯使用此代码获取第三列数据,但我想搞定前置日期数据和字符串数据,就像这样

A574A02211,S193FDRA3,20141023,S17337,WAN HAI 307

如果在没有日期的数据中遇到我想写下来的数据,那么转到继续获取第二个数据

像这样

A574A02211,S193FDRA3,20141023,S17337,WAN HAI 307

A024A13787,S1023F,NULLDATE,S1023F,WAN HAI 316

A574A02181,S187FDRA3,20141024,S17337,WAN HAI 307

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容获取csv文件的行。

string[] lines = File.ReadAllLines(pathToCSVFile);

然后,您可以拆分每一行并分析其包含的内容。

for(int i = 0; i < lines.Length; i++)
{
   string[] fields = lines[i].Split(" ", StringSplitOptions.RemoveEmptyEntries);

   // analyse the fields
}

不是说字段中的元素数量可以被视为该行是否包含数据。

答案 1 :(得分:0)

有一些情况会导致简单.Split(' ')不起作用:空值和包含空格的值。如何定义要分割数据的索引数组,然后运行一组子字符串操作以按您希望的方式拆分它?这样您还可以在20141023S17337 =&gt;等单词的中间进行拆分。 20141023S17337

var input = @"A574A02211     S193FDRA3     20141023S17337     WAN HAI 307
A024A13787     S1023F                S1023F     WAN HAI 316
A574A02181     S187FDRA3     20141024S17337     WAN HAI 307";

var positionsToSplitOn = new int [] { 0, 15, 29, 37, 48 };

var lines = new List<List<string>>();
foreach (var line in input.Split('\n'))
{
    var columnValues = new List<string>();
    for (int i = 0; i < positionsToSplitOn.Length - 1; ++i)
    {
        columnValues.Add(line.Substring(positionsToSplitOn[i], positionsToSplitOn[i + 1] - positionsToSplitOn[i]).Trim());
    }
    columnValues.Add(line.Substring(positionsToSplitOn[positionsToSplitOn.Length - 1]).Trim());
    lines.Add(columnValues);
}