如何在C#中将字符串分解为数组(或List)?

时间:2012-08-29 19:31:57

标签: c# arrays list

使用C#(VS 2010 Express)我将文本文件的内容读入字符串。字符串相当长但可靠地用“\ t”表示选项卡,“\ r \ n”表示回车符/换行符。

选项卡表示新的数据列,新行表示新的数据行。

我想创建一个数组或维度列表(X)(Y),这样数组中的每个点都可以容纳来自文本文件的1行数据,以及该1行中包含的所有Y列(“ \ t“表示新的数据列,”\ r \ n“表示新的数据行”)。

为了简单起见,我们说我的文本有10行数据和2列。我想创建一个数组或列表或您认为最好存储数据的任何内容。我该怎么做呢?感谢。

这是我用来将文本文件中的数据读入字符串的代码:

// Read the file as one string.
            System.IO.StreamReader myFile = new System.IO.StreamReader("f:\\data.txt");
            string myString = myFile.ReadToEnd();

6 个答案:

答案 0 :(得分:1)

var result = contents.Split("\r\n".ToArray(), StringSplitOptions.RemoveEmptyEntries).Select(s => {
    s.Split('\t').ToList();
}).ToList();

result将是List<List<String>>

答案 1 :(得分:1)

答案 2 :(得分:1)

File.ReadLines(sourceFilePath)
    .Select(line => line.Split('\t'))
    .ToArray();

答案 3 :(得分:1)

这将读取文件并为您创建字符串数组列表

List<string[]> rows= File.ReadLines("PathToFile")
    .Select(line=>line.Split('\t')).ToList();

如果您想要string[][]版本,最后只需使用ToArray();代替ToList();

答案 4 :(得分:1)

TextFieldParser是处理基于文本的分隔文件的绝佳类。你可以提供一个文件,一个分隔符(在本例中为“\ t”),它将提供一个获取下一行值的方法(作为一个字符串数组)。

它在一般情况下优于简单Split,因为它可以处理注释,引用字段,转义分隔符等。您可能有也可能没有这种情况,但处理了所有这些尴尬的边缘情况几乎免费是相当不错的。

答案 5 :(得分:1)

就是这样(你已经有一个包含所有东西的字符串):

str.Split(new string[]{"\r\n"}, StringSplitOptions.None)
  .Select(s => s.Split('\t'));

为您提供IEnumerable<string[]>生成variantes,如列表列表,数组数组等,只需要合适的ToArray()ToList()等。

但是,如果您可以一次处理每一行,那么最好使用可以让您这样做的东西:

public IEnumerable<string[]> ReadTSV(TextReader tr)
{
  using(tr)
    for(string line = tr.ReadLine(); line != null; line = tr.ReadLine())
      yield return line.Split('\t');
}

然后你只需要使用每行所需的内存。我们可以进一步改变读数,一次一个地发出每个单独的单元格,但这通常足以读取几百MB的文件,效率合理。

根据对问题的评论进行修改:

如果你真的想,你可以从{<1}}获得:{/ p>

List<string[]>

或者,将行var myFile = new StreamReader("f:\\data.txt"); var list = ReadTSV(myFile).ToList(); 更改为yield return line.Split('\t');,然后获得yield return line.Split('\t');

但是,如果可能,则直接处理结果,而不是先将其放入列表中:

List<List<string>>

它将使用更少的内存,并且更快地开始而不是暂停以首先阅读整个事物。像这样的代码可以毫无怨言地快速通过千兆字节。