2017-05-25 3 views
0

Hier ist meine Datei Ich möchte C# -Code Verwenden Sie einen einzelnen Satz zu machen, die von A bis E aus (aus der Eingabedatei)Lesen Dynamische Sets von Datei mit C#

A,1234,58978,... 
B,55785,.. 
C,5788,... 
C,446687,.. 
E,5456,... 
E,4578,.. 
A,47,78, 
B,5,.. 
C,7,.. 
C,66,.. 
E,56,.. 
E,48, 
A,87,48, 
B,8,.. 
C,74,.. 
C,64,.. 
E,57,.. 
E,48, 

Um sehr klar zu sein,

mein erstes Set sein wird,

A,1234,58978,... 
B,55785,.. 
C,5788,... 
C,446687,.. 
E,5456,... 
E,4578,.. 

mein zweites Set sein wird,

A,47,78, 
B,5,.. 
C,7,.. 
C,66,.. 
E,56,.. 
E,48, 

mein drittes Set sein wird,

A,87,48, 
B,8,.. 
C,74,.. 
C,64,.. 
E,57,.. 
E,48, 

Meine Datei von n-sets.So eine Möglichkeit bestehen soll in einem Array speichern []. So dass ich auch diese mehrere Sätze mit in foreach verarbeiten kann Schleife.

Dennoch konnte ich keinen Weg finden, diese dynamische n-Mengen von Wert in C# zu berechnen und zu speichern.

+1

Verwendung [Liste] (https://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) .aspx) – bansi

+0

Fein. Was hast du bisher versucht? –

+0

var Linien = System.IO.File.ReadLines (Pfad) .Skip (1) .Take (2) .ToArray() Aber mit in der Skip-and-Take-Funktion sollten die Werte nicht statisch sein (fest codiert) .Seit meiner Datei hat n-keine Sätze. – Jayendran

Antwort

0

Die Ergebnisse werden im folgenden Code im Wörterbuch sets angezeigt. Grundsätzlich liest es jede Zeile und vergleicht das erste Zeichen der Zeile mit dem ersten Zeichen der vorherigen Zeile. Wenn größer, wird es nur zum Set hinzugefügt. Wenn kleiner, wird ein neuer Satz erstellt und hinzugefügt. Es wird so lange weitermachen, bis es die ganze Datei gelesen hat.

Ich verwende die ReadLines Methode, so dass es nicht die gesamte Datei in den Speicher lädt, sondern sie Zeile für Zeile lädt, wie wir es anfordern.

string last = ""; 
var sets = new Dictionary<int, List<string>>(); 
File.ReadLines("YourFilePath.txt").Select(x => 
{ 
    string first = x.Substring(0, 1); 
    last = last == "" ? first : last; 
    if (first.CompareTo(last) > 0) 
    { 
     sets[sets.Count-1].Add(x); 
    } 
    else 
    { 
     sets.Add(sets.Count, new List<string>()); 
     sets[sets.Count - 1].Add(x); 
    } 

    return x; 
}).ToList(); 
+0

Danke, das löst meinen Problems.Also, jetzt habe ich einfach die jeweils Werte im Wörterbuch mit dem folgenden Code foreach (Liste Liste in sets.Values) { foreach (string Eintrag in der Liste) verarbeiten kann { MessageBox.Show ("Eintrag" + Eintrag); } } – Jayendran