2016-07-29 6 views
0

Nach dem Lesen einer Textdatei übergebe ich die Informationen durch eine Methode, die die Zeichenfolge aufteilt, um die erforderlichen Informationen für jedes Feld zu erhalten. Ich bin an den Punkt gekommen, an dem ich die Zeichenkette basierend auf neuen Zeilen auftrenne, aber es ist mir unbegreiflich, warum, wenn ich das nachfolgende Array (oder die Liste, in die es konvertiert wurde) anzeigt, nur die erste Hälfte der ersten Split-Zeichenkette zeigt.Wenn ich String.Split verwendet, enthält das nachfolgende Array nur den ersten Wert?

Ein Beispiel, wie die Eingabezeichenfolge aussieht:

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

meinen Code unten finden (die numLines Variable war einfach zu sehen, ob es in die richtige Anzahl von Zeilen aufgeteilt wurde, wie es sollte)

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

der Ausgang ich erhalte, ist:

In-Class Test  
02/07/2014 

Während es die zeigen sollte zweite Saite wird ebenfalls geteilt. Irgendwelche Ideen?

+3

Die einzige Idee hier ist, Ihren Code Schritt für Schritt zu debuggen. – duDE

+0

Versuchen Sie, den Parameter "assignSplit" aus dem Konstruktor List zu entfernen. Meine Vermutung ist, dass Sie die Liste auf eine geringere Anzahl von Elementen einschränken als erwartet. –

+0

Was ist die gewünschte Ausgabe? Es ist mir unklar, was Sie genau machen wollen. – Crowcoder

Antwort

0

Ihr Fehler ist, dass Sie für jede Registerkarte teilen (\t). Split für die neue Zeile wie Sie sagen:

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(); 
} 

Ich hoffe, das hilft.

EDIT: fixiert einfach ein großer Fehler

Frage: Ist es Absicht, dass die Zeichenfolge id nie verwendet?

0

Das Problem liegt im Wert der "kurzen" Variable. Stellen Sie sicher, dass der Wert, den Sie in eine "kurze" Variable eingeben, tatsächlich "\ n" und "\ t" enthält.

0

Sie könnten Regex wie folgt verwenden:

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

Sie könnten Linq verwenden, um auf neue Linie zu spalten, dann auf den Reiter, die erste Zeile das Überspringen dann Aggregat in eine Liste von string:

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]); 
    } 
} 
Verwandte Themen