2016-07-29 85 views
0

阅读完文本文件后,我通过一种方法传递信息,该方法将字符串分开以获取每个字段的必需信息。我已经到了基于新行分割字符串的地步,但它超出了我为什么当我显示后续数组(或列表转换为)时,它只显示第一个分割字符串的前半部分。当我使用String.Split后续数组只包含第一个值?

的输入字符串外观的一个例子:

ASSIGNMENT  
In-Class Test 02/07/2014  
In-Class Test 21/04/2013 

找到我下面的代码(numLines变量是简单地看它被分成了正确的行数,因为它应该)

private void assignmentfinder(string brief, string id) 
{ 
    string searchcrit = "ASSIGNMENT"; 
    string assignment = brief.Substring(brief.IndexOf(searchcrit) + searchcrit.Length); 
    string[] assignmentsplit; 
    assignmentsplit = assignment.Split('\t'); 
    List<string> Assign = new List<string>(assignmentsplit); 
    listBox2.DataSource = Assign; 
    int numLines = assignment.Split('\n').Length; 
    richTextBox1.Lines=(assignmentsplit); 
} 

我得到的输出是:

In-Class Test  
02/07/2014 

尽管它应该显示的第二个字符串也分开。有任何想法吗?

+3

这里唯一的想法是逐步调试你的代码。 – duDE

+0

尝试从列表构造函数中删除“assignmentSplit”参数。我的猜测是,您将列表限制为比预期数量少的项目。 –

+0

什么是期望的输出?我不清楚你到底在做什么。 – Crowcoder

回答

0

你的错误在于你为每个选项卡分割(\t)。正如你所说的为新线拆分:

private void assignmentfinder(string brief, string id) 
{ 
    string searchcrit = "ASSIGNMENT"; 
    string assignment = brief.Substring(brief.IndexOf(searchcrit) + searchcrit.Length); 

    string[] assignmentSplit = assignment.Split('\n'); // splitting at new line 

    richTextBox1.Lines = assignmentSplit; 

    listBox2.DataSource = assignmentSplit.ToList(); 
} 

我希望这有助于。

编辑:只是固定一个巨大的错误

问:是故意的,字符串id是从未使用过?

0

问题在于“简短”变量的值。确保你输入“简短”变量的值实际上包含“\ n”和“\ t”。

0

你可以使用正则表达式是这样的:

private void assignmentfinder(string brief, string id) 
{ 
    Regex rgxLines = new Regex(@"^(.*?)[ \t]+([0-9]{2}\/[0-9]{2}\/[0-9]{4})", RegexOptions.Multiline); 
    MatchCollection mLines = rgxLines.Matches(brief); 

    foreach (Match match in mLines) 
    { 
     richTextBox1.Text += String.Format("Test: {0}{1}Date: {2}{1}{1}", 
              match.Groups[1].Value, 
              Environment.NewLine, 
              match.Groups[2].Value); 
    } 
} 
0

你可以使用LINQ到分裂的新行,然后在标签,跳过第一行,然后聚合成字符串列表:

string brief = @"ASSIGNMENT 
In-Class Test 02/07/2014 
In-Class Test 21/04/2013"; 

List<string> theLines = new List<string>();  
var lines = brief.Split('\n').Skip(1).Select (b => b.Split('\t')); 
foreach (var line in lines) 
{ 
    for (int i = 0; i < line.Length; i++) 
    { 
     theLines.Add(line[i]); 
    } 
} 
相关问题