将字符串从文本文件拆分到另一个列表中

时间:2012-03-08 21:37:31

标签: c# parsing list

嗨我知道标题可能听起来有些令人困惑,但我正在阅读包含多行数据的文本文件

Example
12345 Test 
34567 Test2

我一次读取文本1行并添加到列表

using (StreamReader reader = new StreamReader("Test.txt"))
                    {

                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            list.Add(line);

                    }

                }

我如何将1234与测试分开,这样如果我需要列表(1),我只能拉第一列数据.pars [1]将是12345而list(2).pars [2]会是test2

我知道这听起来很模糊,但我希望那里有人理解

5 个答案:

答案 0 :(得分:2)

也许是这样的:

string test="12345 Test";
var ls= test.Split(' ');

这将为您提供一个字符串数组。您可以使用ls[0]ls[1]来获取它们。

如果您正是12345,那么ls[0]就是您要选择的。

答案 1 :(得分:1)

如果您有一个文本字符串,则可以使用Split()方法将其拆分为多个部分。如果您确定每个单词(由一个或多个空格分隔)是一列,您只需写下:

string[] columns = line.Split(' ');

该函数有几个重载,您可以指定是否跳过空白字段(例如,columns[1]在由2个单词组成但由两个空格分隔的行中为空。如果您确定列数也可以修复该限制(因此,如果最后一列之后的任何文本将被视为单个字段)。

在您的情况下(仅将第一列添加到列表中)您可以写:

if (String.IsNullOrWhiteSpace(line))
 continue;

string[] columns = line.TrimLeft().Split(new char[] { ' ' }, 2);
list.Add(columns[0]);

首先检查是跳过空或仅由空格组成的行。 TrimLeft()是从行的开头删除空格(如果有的话)。第一列不能为空(因为TrimLeft()所以你甚至不需要StringSplitOptions.RemoveEmptyEntries使用额外的if (columns.Length > 1)。最后,如果文件足够小,你可以阅读它在内存中只需调用File.ReadAllLines()并使用一点LINQ来简化所有内容:

list.Add(
 File.ReadAllLines("test.txt")
 .Where(x => !String.IsNullOrWhiteSpace(x))
 .Select(x => x.TrimLeft().Split(new char[] { ' ' }, 2)[0]));

请注意,使用第一个参数,您可以指定多个有效分隔符。

答案 2 :(得分:1)

如果您对字符串[]的列表没问题,可以直接执行此操作:

        var list = new List<string[]>();
        using (StreamReader reader = new StreamReader("Test.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                list.Add(line.Split(' '));
            }
        }

        string firstWord = list[0][0]; //12345 
        string secondWord = list[0][1]; //Test

答案 3 :(得分:0)

当你有多个空格时

Regex r = new Regex(" +");
string [] splitString = r.Split(stringWithMultipleSpaces);

答案 4 :(得分:0)

  var splitted = System.IO.File.ReadAllLines("Test.txt")
      .Select(line => line.Split(' ')).ToArray();
  var list1 = splitted.Select(split_line => split_line[0]).ToArray();
  var list2 = splitted.Select(split_line => split_line[1]).ToArray();