2012-09-05 74 views
1

我有一个文本文件,我用\n分开。string.Split()和一个if语句

文本文件(测试)读取

1 
2 
3 
4 

现在混乱的部分。

代码

string test = System.IO.File.ReadAllText(@"C:\Custom tests\"+testselect.Text+".txt"); 

string[] check = test.Split('\n'); 

if (check[0] == "1") 
{ 
    label.Text = "whatever"; 
} 

这不起作用。标签保持默认值。但是如果我:

label.Text = check[0]; 

标签显示1

我不明白这一点,请帮助。

+0

你调试了代码 –

+0

你的文件很可能是一个windows文本文件,在这种情况下,行是“\ r \ n”而不是简单的“\ n”,因此数组中的每个字符串可能是“1 \ r“等。请参阅Reed的回答。 – IanNorton

+0

它可能甚至不会被拆分我猜 – Sankara

回答

3

首先 - 你应该能够只使用File.ReadAllLines而不是阅读的文本和分裂....

您可能需要修剪的结果。如果线路上有额外的空白,则条件可能会失败。尝试使用:

if (check[0].Trim() == "1") 
{ 

这将修剪任何空白,这应该会导致您的条件成功。

您也可以在其中放入一个断点,并检查调试器中的值。这将帮助您更好地诊断问题。

+0

.Trim()做到了,谢谢。我很感激。 –

+1

不要忘记接受他的回答。点击绿色的复选标记。 –

0

你只是比较数字?需要检查情况和空白..

string.Equals(check[0].Trim(), "some value", StringComparison.OrdinalIgnoreCase); 
0

你可以使用这样的事情:

取出的回报,如果有任何

string[] check = test.Replace("\r", "").Split('\n'); 

     if(check[0] == "1") 

或新线分开,并采取字符该数组并检查。

string[] check = test.Split('\n'); 

     if(check[0][0] == '1') 

我会使用选项二。

编辑:

或者这样的事情,但它有点OTT,你会得到所有的\ r \ n个

char[] check = test.SplitMeUp(); 

     if(check[0] == '1') 


static class Extensions 
{ 
    public static char[] SplitMeUp(this string str) 
    { 
     char[] chars = new char[str.Length]; 
     for (int i = 0; i < chars.Length; i++) 
      chars[i] = str[i]; 

     return chars; 
    } 
} 

编辑:

别的东西过滤掉特定的字符

public static char[] SplitMeUp(this string str, char[] filterChars = null) 
    { 
     List<Char> chars = new List<char>(); 
     for (int i = 0; i < str.Length; i++) 
     { 
      if(filterChars != null && filterChars.Length > 0 && filterChars.Contains(str[i])) 
        continue; 

      chars.Add(str[i]); 
     } 

     return chars.ToArray(); 
    } 

,并使用它像

char[] check = test.SplitMeUp(new char[] {'\r', '\n'}); 

     if(check[0] == '1') 

它会忽略所有这些\ r \ n,只是分割一切。