当我想阅读并比较基于列的文本文件中的每个单词时,我遇到了问题。
以下是我的文件的样子:
[ID] [Uname] [PW] [Email]
0 asd asd s
1 asdd asd asd@asd
2 asd asd asd@
我想阅读第二列中的每个单词并将其与文本框的文本进行比较。 如果其中任何一个与文本框的文本相同,则会显示"用户名已经使用。"
这是我尝试过的代码:
string[] lines = File.ReadAllLines(path);
foreach (var line in lines) {
var firstValue = line.Split(new string[] { "\t" },StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(firstValue);
if (firstValue[1].Equals(txt_uname.Text) && txt_uname.Text != "") {}
}
问题是" if"仅检查我的[Uname]列的最后一个元素(asd)
答案 0 :(得分:1)
由于您一次阅读所有行,这对您也有用。
string[] lines = File.ReadAllLines(path);
if (!String.IsNullOrEmpty(txt_uname.Text)
&& lines.Where(u => u.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries)[1].Equals(txt_uname.Text)).Count() > 0)
{ }
答案 1 :(得分:0)
听起来这就是你实际使用的代码:
string[] lines = File.ReadAllLines("FilePath");
foreach (var line in lines)
{
var firstValue = line.Split(new[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(firstValue[1]); // Needs to have [1] or it will just print System.String[]
}
即便如此,这应该有效。因此,我们不能看到更大的图片,或者您的文件缺少标签并使用空格。
这是一个逐行读取文件的示例(如果您正在使用的文件可能在数百兆字节内,则更多内存精通)然后将行拆分为值以进行比较:
using (var streamReader = new StreamReader("FilePath"))
{
if (!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
if (!String.IsNullOrEmpty(line))
{
string[] splitValues = line.Split(new[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
if (splitValues[1] == txt_uname.Text)
{
// Stuff
}
}
}
}