2017-08-15 75 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]},控制台窗口也不显示输出。 –