如何在文本文件的每一行中分隔字符串,并将它们与用户输入进行比较

最后发布: 2019-08-14 19:42:15


问题

我的目标是将用户输入的字段与文本文件中的数据进行匹配。

1000|I-002096.02.02|EL|MISCMI
1000|I-002097.02.02|EL|ESYEED
1000|I-002098.02.02|EL|MISCCA
1000|I-002099.02.02|EL|MISCCA
1000|I-002100.02.02|EL|MISCCA
1000|I-002101.02.02|EL|USQUIC00
1000|I-002102.02.02|EL|MISCMI

第一个“|”之后的部分 分隔符是我需要检查用户输入。 (用户输入存储在下面代码中的TxtWBS.Text中)

这是我尝试过的,但这只适用于每一行都没有划分的情况。

string[] wbslist = File.ReadAllLines(filePath);
bool wbsExists = Array.Exists(wbslist, element => element == TxtWBS.Text);
    if (wbsExists)
       /*leave empty*/;
    else
       errMessage += "This WBS does not exist" + Environment.NewLine;

我希望能够检查文本文件中是否存在用户输入。

c# delimiter delimited-text
回答

您可以使用以下代码。 读取文件并逐行迭代,通过标记“|”将每一行拆分为字符串数组。

string[] wbslist = File.ReadAllLines(filePath);
foreach(string line in wbslist)
{
    string [] splittedLine = line.Split('|');
    // I assume you need the second element in the delimited line
    if(string.Equals(splittedLine[1], TxtWBS.Text, StringComparison.OrdinalIgnoreCase))
        Console.WriteLine("Website found");
}


回答

这可以通过Linq中的一行来完成。 将您的测试更改为:

bool wbsExists = wbslist.Any(x => x.Contains(TxtWBS.Text));

如果您不确定输入的情况,您可以拥有

bool wbsExists = wbslist.Any(x => -1 != x.IndexOf(TxtWBS.Text, StringComparison.CurrentCultureIgnoreCase));

更多,如果你想检查与行中第二项完全匹配的话

bool wbsExists = wbslist.Select(x => x.Split('|')[1]).Any(k => k == TxtWBS.Text);

还要考虑将文本数据的加载更改为

var wbslist = File.ReadLines(filePath);

File.ReadLines不会立即读取内存中的所有行,但会返回更适合Linq表达式的IEnumerable<String>


回答

好吧,如果你完全确定文件的格式,那么你可以拆分分隔符上的每一行,并检查结果数组中第二个元素的用户输入。

bool wbsExists = Array.Exists(wbslist, element => element.Split('|')[1] == TxtWBS.Text);