2015-11-24 106 views
0

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

这里是我的文件看起来像:

[ID] [Uname] [PW] [Email]  
0  asd  asd  s 
1  asdd asd  [email protected] 
2  asd  asd  [email protected] 

我想读,并与我的文本框的文本第二列比较每个字。 如果其中任何一个与文本框的文本相同,则会显示“用户名已被占用”。

这是我试过的代码:

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 != "") {} 
    } 

的问题是,“如果”只检查最后一个元素(ASD)我的[UNAME]列的

+0

也许你应该使用循环? – Steve

+0

'line'从哪里来? –

+0

代码中定义的行在哪里?这是什么价值? – Nate

回答

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) 
{ } 
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 
        } 
       } 
      } 
     } 
相关问题