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

c#如何将文本文件中的多组单词放入数组,c#,string,parsing,text,text-files,C#,String,Parsing,Text,Text Files,我有一个文本文件,里面有这些词 PEOPLE John 0218753458 ENTERPRISE stock 30% HOME Indiana West Virginia PEOPLE Vahn 031245678 ENTERPRISE Inc 50% HOME melbourne Australia 我想把这些文件分割成一些字符串,这些字符串将把文件分为每个人、企业和家庭组。例如,输出将是 第[0]部 PEOPLE John 0218753458 第[1]部 ENTERPISE s

我有一个文本文件,里面有这些词

PEOPLE
John
0218753458
ENTERPRISE
stock
30%
HOME
Indiana
West Virginia
PEOPLE
Vahn
031245678
ENTERPRISE
Inc
50%
HOME
melbourne
Australia
我想把这些文件分割成一些字符串,这些字符串将把文件分为每个人、企业和家庭组。例如,输出将是

第[0]部

 PEOPLE
 John
 0218753458
第[1]部

ENTERPISE
stock
30%
第[2]部

HOME
Indiana
West Virginia
等等

我有一个使用的计划

编辑#1(谢谢@Slade)

我不能改变结构。 有没有办法保持标题?还是更好的方法呢?

不要使用运算符,它用于条件/逻辑or表达式。相反,在像您这样填充数组元素时,请使用逗号,如下所示:

string[] part = s.Split(new string[] { "PEOPLE", "ENTERPRISE", "HOME" }, StringSplitOptions.None);
然而,除非你总是有这些标题,否则这不是分割文本文件的好方法。相反,您需要为文件定义一些结构。例如,如果您总是使用大写的标题,那么您可能希望首先将文本文件拆分为行,然后在每次遇到仅包含大写字符的行时循环遍历每个元素并对元素进行分组

就个人而言,如果可能的话,我会更改文本文件结构,这样您就可以在标题之前或之后标记一些符号:例如,
:这是一个标题
。这样,您可以分成几行,然后只需在行首查找
符号即可

编辑

有关如何使用FULL CAPS头解析此文件的示例方法,请参阅上的代码示例

注:该行

string[] lines = File.ReadAllLines(@"Sample.txt");
。。。可以替换为

string textFromFile = File.ReadAllText(@"Sample.txt");
string[] lines = textFromFile.Split(new string[1] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

如果您希望保存头本身而不是可能保存头,则最好按每个参数多次拆分字符串,然后手动添加头。例如,您将字符串按人员拆分,并将人员标题添加到每个区块中。然后按主块分割每个区块,并手动添加主标题,依此类推。

使用正则表达式,因为您希望在结果中保留分割的字符串:

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]);
}
string[]tmp=Regex.Split(originalString,@“(PEOPLE | ENTERPRISE | HOME)”;
列表结果=新列表();
对于(变量i=1;i
这会给你想要的结果


我连接tmp数组的原因是,从.NET2.0开始,Regex.Split将返回分割字符串作为数组的一部分。我也从1开始索引,因为我们希望我们的连接发生得晚些

我将给出一个与您要求的答案不完全匹配的答案,因此如果您死心塌地想要得到您在问题中定义的输出,请忽略。否则,我希望这是有用的

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();
    }
}

这不是创建字符串数组的正确方法。首先,将| |替换为,(逗号),您的代码至少可以编译。在您的示例输出中,第二组数据,即Vahn、melbourne等发生了什么变化。?您是否希望将这些数据插入到同一个数组中?不,它也将是第[3]部分、第[4]部分、第[5]部分。啊,是的,谢谢您,但有没有办法不丢失个人、企业和家庭的标题文字?我无法更改文本文件结构,但它总是使用大写,如果可能的话,我想分割这些文件,或者有更好的方法吗?也许使用正则表达式?或者子字符串?@GammaSatriaKurniawan查看我编辑的答案,了解可能的方法。是的,当然这是很大的帮助,但是您的代码将每一行保存在一个数组中,我需要的是将它们保存在每个组的一个数组中,也许我可以编辑您的一些代码,谢谢抱歉,我错过了调试,我只看到了行>。
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]);
}
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" }