嗨我知道标题可能听起来有些令人困惑,但我正在阅读包含多行数据的文本文件
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
我知道这听起来很模糊,但我希望那里有人理解
答案 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();