C# 相关项目清单
我有一个文本文件,其格式类似于以下内容:C# 相关项目清单,c#,.net,C#,.net,我有一个文本文件,其格式类似于以下内容: # example1.com;example2.com;example3.com example4.net;example6.org example7.uk;example8.io;ab123example4.net # 每行定义一个公司拥有的域。 每行可以有2个或更多域 很遗憾,我无法修改文件的格式 我不太熟悉c#(我通常在Linux/Unix上使用bash/sh,我可能默认使用grep),我正在尝试扩展一些现有的c#软件,以添加一个检查两个域是否属
#
example1.com;example2.com;example3.com
example4.net;example6.org
example7.uk;example8.io;ab123example4.net
#
每行定义一个公司拥有的域。
每行可以有2个或更多域
很遗憾,我无法修改文件的格式
我不太熟悉c#(我通常在Linux/Unix上使用bash/sh,我可能默认使用grep),我正在尝试扩展一些现有的c#软件,以添加一个检查两个域是否属于同一家公司的检查
目前,我正在阅读以下文件:
private List<string> _CompanyOwnedDomains;
private String CompanyOwnedDomainsFileName = Environment.GetEnvironmentVariable(
"DomainChecker",
EnvironmentVariableTarget.Machine) +
@"Path\To\CompanyOwnedDomains.config";
// Various error checking happens here
_CompanyOwnedDomains = File
.ReadAllLines(CompanyOwnedDomainsFileName)
.Where(line => !String.IsNullOrEmpty(line))
.Where(line => !line.StartsWith("#"))
.Select(line => line.ToLower())
.ToList();
var match = _CompanyOwnedDomains
.FirstOrDefault(domains => domains.Contains(domainA.ToString()
&& domains.Contains(domainB.ToString());
example4.net
包含在ab123 example4.net
中列表
:
var match = _CompanyOwnedDomains
.FirstOrDefault(domains => domains.Contains(domainA.ToString()
&& domains.Contains(domainB.ToString());
example4.net
包含在ab123 example4.net
中列表
:
我认为您需要另一个通行证才能正确地从文件中提取域名 首先,使用,然后您还应该检查由所有空格组成的行,而不仅仅是空行,最后,在将行转换为小写后,您可以将其拆分为分号,并使用SelectMany将生成的数组添加到列表中。
如果需要删除域副本,可以使用Distinct
_CompanyOwnedDomains = File
.ReadLines(CompanyOwnedDomainsFileName)
.Where(line => !String.IsNullOrWhiteSpace(line))
.Where(line => !line.StartsWith("#"))
.SelectMany(line => line.ToLower().Split(';'))
.Distinct().ToList();
现在,每个域都与其他域分离,您不必担心Contains的误报,因为您可以使用列表中的Any
方法检查是否有匹配项用于搜索
bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");
我认为您需要另一个通行证才能正确地从文件中提取域名 首先,使用,然后您还应该检查由所有空格组成的行,而不仅仅是空行,最后,在将行转换为小写后,您可以将其拆分为分号,并使用SelectMany将生成的数组添加到列表中。
如果需要删除域副本,可以使用Distinct
_CompanyOwnedDomains = File
.ReadLines(CompanyOwnedDomainsFileName)
.Where(line => !String.IsNullOrWhiteSpace(line))
.Where(line => !line.StartsWith("#"))
.SelectMany(line => line.ToLower().Split(';'))
.Distinct().ToList();
现在,每个域都与其他域分离,您不必担心Contains的误报,因为您可以使用列表中的Any
方法检查是否有匹配项用于搜索
bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");
快告诉我吧,回答得很好谢谢,读了一些之后,哈希集似乎是正确的方向。我认为可能会有多种情况,但不太确定如何处理。请告诉我,回答得好,谢谢,在阅读了一些之后,哈希集似乎是正确的方向。我认为可能有多种情况,但不太确定如何处理。谢谢。这当然让事情变得容易了。我读的c#越多,我就越喜欢它作为一种语言。我没有意识到每行中都有CSV,介意我用这个建议更新我的答案吗?这看起来当然更好。我认为这个答案应该提到在这种情况下使用
ReadAllLines()
的低效性。我认为OP最好使用ReadLines()
对吗?谢谢。这当然让事情变得容易了。我读的c#越多,我就越喜欢它作为一种语言。我没有意识到每行中都有CSV,介意我用这个建议更新我的答案吗?这看起来当然更好。我认为这个答案应该提到在这种情况下使用ReadAllLines()
的低效性。我认为OP最好使用ReadLines()
对吗?
bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");