2017-08-15 127 views
2

我有一個文本文件,根據新行將它拆分爲一個字符串數組。基於2個參數將數組拆分爲2D C#

string [] arr = s.Split('\ n');

現在,我需要進一步將其分類爲一個二維數組,其中每列是一個新的「交易」。

21 ...... 22 .... 23 ..... 31 .... 32: 所以文本文件基本上包含有關銀行交易的信息,一個例子是如下..... 31 ..... 32 ..... 21 .... 21 ..... 22 ....

的號碼的開頭表示一個新tx記錄從一個新行開始。我想把它變成一個二維數組,其中每一列從21開始分組爲一個tx,直到遇到下一個21(所以它之前的記錄)。

for (int i = 0; i < arr.Length; i++) 
     { 
      if (arr[i].StartsWith("21")) 
      { 
       indices[i] = i; 
      } 
     } 

我試着寫上面的代碼來檢查以21開頭的數組元素,然後存儲索引,但它最終存儲了所有的索引。

任何幫助將不勝感激!

+0

'arr [i] .Split(new string [] {「21」},StringSplitOptions.None);'? –

+0

不,我試過這種情況,在這種情況下,在數組中有21個元素,每次有21個元素,但是如果沒有21個元素,它就會成爲一個新的數組元素。我希望它組直到它發現未來21,而不僅僅是21. –

+0

對不起,但我仍然不會跟着你。你能否提供該行例子的*期望結果?例如。如果給予我們 ''21 A 22 B 23 C 31 D 32 E 31 F 32 G 21 H 21 I 22 J「'結果應爲 '[」21 A 22 B 23 C 31 D 32 E 31 F 32 G「,」21 H「,」21 I 22 J「]'? –

回答

1

什麼你」 d需要做的是

string[] arr = s.Split('\n'); 

List<List<string>> listOfLists = new List<List<string>>(); //dynamic multi-dimensional list 

//list to hold the lines after the line with "21" and that line 
List<string> newList = new List<string>(); 
listOfLists.Add(newList); 

for(int i = 0; i < arr.Length; i++) 
{ 
    if(arr[i].StartsWith("21")) 
    { 
     if(newList.Count > 0) 
     {     
      newList = new List<string>(); //make a new list for a column 
      listOfLists.Add(newList);  //add the list of lines (one column) to the main list 
     } 
    } 
    newList.Add(arr[i]); //add the line to a column 
} 
1

如果我理解你的權利,你可以嘗試正則表達式(即代替分裂提取物交易):

using System.Linq; 
    using System.Text.RegularExpressions; 

    ... 

    string line = "21 A 22 B 23 C 31 D 32 E 31 F 32 G 21 H 21 I 22 J"; 

    var result = Regex 
    .Matches(line, "21 .*?((?=21)|$)") 
    .OfType<Match>() 
    .Select(match => match.Value) 
    .ToArray(); // <- let's materialize as na array 

    Console.Write(string.Join(Environment.NewLine, result)); 

結果:

21 A 22 B 23 C 31 D 32 E 31 F 32 G 
21 H 
21 I 22 J 
+0

我試過了。不起作用:(因爲我希望的結果應該是因爲我回復了你以前的評論,但即使這個沒有工作:( –

+0

@RicheekDey不起作用*怎麼*?這看起來完全像你要求的 – Default

+0

那麼,調試器顯示結果爲{字符串[0]},控制檯窗口也不顯示輸出。 –