c#如何将文本文件中的多组单词放入数组中
本文关键字:单词放 数组 文本 文件 | 更新日期: 2023-09-27 18:20:01
我有一个文本文件,其中包含这些单词
PEOPLE
John
0218753458
ENTERPRISE
stock
30%
HOME
Indiana
West Virginia
PEOPLE
Vahn
031245678
ENTERPRISE
Inc
50%
HOME
melbourne
Australia
我想将这些文件拆分为一些字符串,这些字符串将把划分为每个组的PEOPLE、ENTERPRISE和HOME。例如,输出将是
部件[0]
PEOPLE
John
0218753458
第[1]部分
ENTERPISE
stock
30%
第[2]部分
HOME
Indiana
West Virginia
等等
我有一个使用的计划
编辑#1(感谢@Slade)
string[] part = s.Split(new string[] { "PEOPLE","ENTERPRISE","HOME" }, StringSplitOptions.None);
我无法改变结构。有什么办法可以保留HEADER吗?还是更好的方法?
不要使用||
运算符,它用于条件/逻辑OR表达式。相反,当像您正在做的那样填充数组的元素时,请使用逗号,如下所示:
string[] part = s.Split(new string[] { "PEOPLE", "ENTERPRISE", "HOME" }, StringSplitOptions.None);
但是,除非总是有这些标题,否则分割文本文件不是一个好方法。相反,您需要为文件定义一些结构。例如,如果您的页眉总是使用FULL CAPS,那么您可能希望从将文本文件拆分成行开始,然后循环遍历每个元素,并在每次遇到仅包含FULL CAPS字符的行时对元素进行分组。
就我个人而言,如果可能的话,我会更改文本文件结构,这样你就可以在标题之前或之后用一些符号来标记标题:例如:THIS IS A HEADER
。这样,您就可以分割成多行,然后只需在一行的开头查找:
符号。
编辑
有关如何使用FULL CAPS标头解析此内容的示例方法,请参阅我在PasteBin上的代码示例。
注意:行。。。
string[] lines = File.ReadAllLines(@"Sample.txt");
可以替换为。。。
string textFromFile = File.ReadAllText(@"Sample.txt");
string[] lines = textFromFile.Split(new string[1] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
使用regex,因为您希望在结果中保留拆分字符串:
string[] tmp = Regex.Split(originalString, @"(PEOPLE|ENTERPRISE|HOME)");
List result = new List();
for(var i = 1; i < tmp.Count() - 1; i += 2) {
result.Add(tmp[i] + tmp[i+1]);
}
这会给你想要的结果。
我之所以连接tmp数组,是因为从.NET2.0开始,Regex.Split会将拆分后的字符串作为数组的一部分返回。我还从1开始索引,因为我们希望我们的连接在后期发生
s.Split(new string[] {"PEOPLE", "ENTERPRISE", ... }, StringSplitOptions.RemoveEmptyEntries);
如果你想保存标题本身,最好是用每个参数多次拆分字符串,然后手工添加标题。例如,您按People分割字符串,并将People标头添加到每个区块中。然后通过HOME分割每个块,并手动添加HOME头,依此类推。
我将给出一个与您所要求的不完全匹配的答案,因此,如果您对问题中定义的输出一筹莫展,请忽略。否则,我希望这是有用的;
var peopleList = new List<string>();
var enterpriseList = new List<string>();
var homeList = new List<string>();
List<string> workingList = null;
using (var reader = new StreamReader("input.txt"))
{
string line = reader.ReadLine();
while (line != null)
{
switch (line)
{
case "PEOPLE": { workingList = peopleList; } break;
case "ENTERPRISE": { workingList = enterpriseList; } break;
case "HOME": { workingList = homeList; } break;
default: { workingList.Add(line); } break;
}
line = reader.ReadLine();
}
}
根据您的示例输入,这将填充以下三个列表;
peopleList = { "John", "0218753458", "Vahn", "031245678" }
enterpriseList = { "stock", "30%", "Inc", "50%" }
homeList = { "Indiana", "West Virginia", "melbourne", "Australia" }