2016-10-03 1 views
0

Ich bin mit dem Kopf gegen die Wand schlagen, und ich hoffe, dass jemand mich in die richtige Richtung zeigen kann. Das kann nicht so kompliziert sein wie ich es mache.Lesen CSV-Datei, Spalte 3 in Spalte 1 in separaten Zeilen

Ich arbeite an einem Projekt, wo das Programm liest eine Datei (das ist ungefähr 50 Zeilen oder so), und ich muss es übereinstimmen Daten in der dritten Spalte mit Daten in der ersten Spalte einer separaten Zeile. Ich habe ein neues Projekt eröffnet, weil es für eine so einfache Aufgabe zu komplex wurde.

Hier ist eine Beispieldatei, die eng mit Bezug auf die aktuelle Datei ist mit arbeite ich: a1,b1,c1,d1 **c4**,b2,c2,d2 a3,b3,c3,d3 a4,b4,**c4**,d4 a5,b5,c4,d5 verspreche ich dies nicht für ein Schulprojekt ist, das ist etwas, das ich für dienstliche Zwecke brauchen, um herauszufinden.

Hier ist was ich habe, und ich weiß, es wird einfach nicht funktionieren, weil es nur Zeile für Zeile zum Vergleich liest. Wie bekomme ich das Programm den aktuellen Array-Wert in dem Foreach-Befehl gegen die gesamte Datei zu lesen, die ich in Streamreader abgefangen habe?

static void Main(string[] args) 
    { 
     StreamReader sr = new StreamReader("directories.txt"); 
     string sline = sr.ReadLine(); 
     string[] sarray = sline.Split(','); 
     string col3 = sarray[2]; 
     string col1 = sarray[0]; 
     foreach(string a in sarray) 
     { 
      // ?!?!?!!! 
      // I know this won't work because I'm comparing the same line being read. 
      // How in the world can I make this program read col3 of the current line being read against the entire file that was read earlier? 
      if (col3 == col1) 
      { 
       Directory.CreateDirectory("DRIVE:\\Location\\" + a.ToString()); 
      } 

     } 
    } 

Vielen Dank im Voraus!

+2

Verwendung 'File.ReadAllLines' und die Arbeit mit der gesamten Kollektion. Es ist nicht so, als hätten Sie eine riesige Datei mit 50 Zeilen. – Jonesopolis

+0

der Kommentar Teil nicht offenlegt, was mit den Daten neben Match getan werden soll, aber Sie könnten wahrscheinlich Linq (GroupBy) verwenden, um die Übereinstimmungen zu finden – Plutonix

Antwort

2

Da Ihre Datei ist klein, dass man mit den einfachsten Weg ... gehen kann

var lines = File.ReadLines(filename) 
      .Select(line => line.Split(',')) 
      .ToList(); 

var result = from a in lines 
      from b in lines 
      where a[0] == b[2] 
      select new { a, b }; 

foreach(var x in result) 
{ 
    Console.WriteLine(string.Join(",", x.a) + " - " + string.Join(",", x.b)); 
} 
+1

Ah man. Das war schmerzlich einfach, aber ich lernte daraus; Vielen Dank für Ihre Antwort! –

Verwandte Themen