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吗?还是更好的方法?

c#如何将文本文件中的多组单词放入数组中

不要使用||运算符,它用于条件/逻辑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" }