【问题标题】:C# reading each word in column in a text fileC#读取文本文件中列中的每个单词
【发布时间】:2015-11-24 21:36:59
【问题描述】:

当我想阅读和比较基于列的文本文件中的每个单词时遇到问题。

这是我的文件的样子:

[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)

【问题讨论】:

  • 也许你应该使用循环?
  • line 来自哪里?
  • 代码中定义的行在哪里?这个值是多少?
  • 我用过这个。 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 != "") {}}
  • @Aaron 为什么不编辑您的问题并使用实际代码修复显示的代码?不要给出错误的样本并期望得到正确的答案

标签: c# file text compare


【解决方案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)
{ }

【讨论】:

    【解决方案2】:

    听起来这是您实际使用的代码:

    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
                        }
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 2016-02-12
      • 2011-04-12
      • 2014-11-07
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多