2015-11-03 20 views
0

A574A02211 S193FDRA3 20141023S17337 WAN HAI 307字符串分割在CSV asp.net C#

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 

IM使用此代码获得第三列的数据,但我想拖前台日期数据和字符串数据,就像这样

A574A02211,S193FDRA3,20141023,S17337,WAN HAI 307

如果没有最新的数据我wantto写下NULL,则跳转继续得到满足第二数据

喜欢这个

A574A02211,S193FDRA3,20141023,S17337,WAN HAI 307 

A024A13787,S1023F,NULLDATE,S1023F,WAN HAI 316

A574A02181,S187FDRA3,20141024,S17337,WAN HAI 307

+0

如果数据是在固定宽度格式,那么代替'split'使用'substring'获得各值,然后使用'length'检查日期数据。 [MSDN上的子字符串](https://msdn.microsoft.com/en-us/library/aka44szs(v = vs.110).aspx) – haraman

回答

0

有几种情况会导致简单的.Split(' ')无效:空白值和包含空格的值。如何定义要分割数据的索引数组,然后运行一组子串操作以按照需要的方式分割它?这也可以让你分开在词的中间,如20141023S17337 =>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); 
} 
+0

感谢您的回复,这非常有用! –

2

你可以使用fo获取你的csv文件的行llowing。

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

然后,你可以拆分每一行并分析它的包含。

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

    // analyse the fields 
} 

并非说明字段中的元素数量可以视为行是否包含数据的历史记录。

+0

您确定要拆分(“”?not split“,”?“ – Thomas

+1

这将不适用于像“WAN HAI 316” –

+0

我不使用拆分为','我只是分离这个数据== 20141023S17337就像这个20141023,S1​​7337,如果前面没有日期这样的nulldate,S17337 –