如何创建两个独立的列表从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);
}
谁能建议如何获得唯一代码的第二个列表
可能:
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);
}