我有一个文本文件,我根据新行分成了一个字符串数组。
string [] arr = s.Split('\ n');
现在,我需要进一步将其分类为二维数组,其中每列是一个新的“事务”。 因此,文本文件基本上包含有关银行交易的信息,下面给出了一个例子:
21 ...... 22 .... 23 ..... 31 .... 32 ..... 31 ..... 32 ..... 21 .... 21 ..... 22 ....
数字的开头表示从新行开始的新tx记录。我想把它变成一个2D数组,其中每一列被分组为从21开始的一个tx,直到它遇到下一个21(所以它之前的记录)。
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].StartsWith("21"))
{
indices[i] = i;
}
}
我尝试编写上面的代码来检查以21开头的数组元素,然后存储索引但最终存储所有索引。
任何帮助将不胜感激!
答案 0 :(得分: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
答案 1 :(得分:1)
你需要做的是
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
}