2015-11-03 62 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 –