如何创建两个独立的列表从c#中给定的文本文件

本文关键字:文件 文本 string 何创建 创建 两个 列表 独立 | 更新日期: 2023-09-27 17:53:19

我得到了一个文本文件。文本文件的详细信息如下

所示。

ab|123456受体0M9C[某些名称]ABRAKADABRATDNPQLQVVIFSAAAAAAAAAABHDBSIISLTLLDSAMNJHDFBHGFBNFBHGHFBNVCNAGHDGBEBEHGFNMFIFLGSTEFFLLASMSYDCYVAICKPLHYTTIMSDRICYQLIISSWLAGFLVIFPPLAM145678受体00AB[某些名称]nabsnbfbfgbfnbnbnbnbfjhbfnbfnbjhjbfnbfviihsdshlhtpmyfflsnlslvdlgyssavapktvAALRSGDKAISYDGCAAQFFFFVGFATVECYLLASMAYDRHAAVCRPLHYTTTMTAGVCALLATGSYVSGab|137565受体0D0[某些名称]MKNKSMEIEFILLGLTDDPQLQIVIFLFLFLNYTLSLMGNLIIIILTLLDPRLKTPMYFFLRNFSFLEVIFTTVCIPKJKDHDNDJFNFNNBFNBFBNBFBJBNFJNFJFGVALLYTSIAPLLNPFIYTLRNQQVKEVFWDVLQKNLCFSKRPF

我必须创建到2列表,

第一个列表名称(包含[某些名称]的行)第2个列表unique_code(全部大写的行)

名称与唯一码相互关联

我可以使用下面的代码 从文本文件中获得名称
List<string> Name = new List<string>();
System.IO.StreamReader file =new System.IO.StreamReader(filename);

var query = from line in File.ReadLines(filename)           //linq query to select the name
            where line.Contains("some name")
            select line;

        foreach (string line in query)                      //storing the name in a list
        {
            Name.Add(line);
        }

谁能建议如何获得唯一代码的第二个列表

如何创建两个独立的列表<string>从c#中给定的文本文件

可能:

List<List<string>> lists = File.ReadLines("Path")
    .GroupBy(l => l.Contains("[some name]"))
    .Select(g => g.ToList())
    .ToList();

如果名称行与其他行相关,我建议使用自定义类代替。这使得你的代码更易读,更易维护。

下面是一个示例类:

public class Receptor
{
    public Receptor(string name)
    {
        this.Name = name;
        this.Codes = new List<string>();
    }
    public string Name { get; set; }
    public List<string> Codes { get; set; }
}

,这里是我要使用的循环:

List<Receptor> receptors = new List<Receptor>();
var lines = File.ReadLines("Path").SkipWhile(l => !l.Contains("[some name]"));
foreach (string line in lines)
{
    if (line.Contains("[some name]"))
        receptors.Add(new Receptor(line));
    else
        receptors.Last().Codes.Add(line);
}

对于第二个列表,对于每行,您可以使用一个正则表达式来搜索是否所有字符都是大写

List<String> list = new List<string>();
string pattern = @"^[^a-z]+$";
foreach (string line in query)
{
    Regex r = new Regex(pattern, RegexOptions.None);
    Match match = r.Match(line);
    if (match.Value != "")
        list.Add(match.Value);
   }