2016-04-13 2 views
0

Ich muss ein gezacktes Array erstellen, mit dem ich sortieren und arbeiten kann. Ich habe 7 Textdateien mit jeweils 1022 Zeilen Daten. Das Array, das ich brauche, ist ein Array von 1022 Arrays mit jeweils 7 Elementen (im Grunde eine Zeile aus jeder Datei pro Array)C# Wie erstelle ich ein gezacktes Array mit Daten aus mehreren Dateien

Ich habe noch nie ein gezacktes Array vor und während ich online viel darüber finden kann, wie sie gemacht werden Ich kann nichts darüber finden, wie man sie bevölkert, das hilft mir dabei. Ich kann das Array machen und es zu der Größe machen, die ich will, aber es zu bevölkern ist, wo ich verloren bin.

Wirklich zu schätzen jede Hilfe, die Sie mir damit geben können.

+0

LINQ ist wahrscheinlich der einfachste Weg. Sie müssen es nicht manuell auffüllen, wenn Sie LINQ verwenden. – dotNET

+0

Ich habe noch nie Erfahrungen mit LINQ gemacht. Kannst du mir erklären, wie ich das mache, um zu tun, was ich will? – iMxAndyy

Antwort

0

Sie können the File.ReadLines method verwenden, um eine zählbare Sequenz aller Zeilen in einer Datei zu erhalten:

var source = new [] 
{ 
    File.ReadLines(@"C:\dir\file1.txt"), 
    File.ReadLines(@"C:\dir\file2.txt"), 
    File.ReadLines(@"C:\dir\file3.txt"), 
    File.ReadLines(@"C:\dir\file4.txt"), 
    File.ReadLines(@"C:\dir\file5.txt"), 
    File.ReadLines(@"C:\dir\file6.txt"), 
    File.ReadLines(@"C:\dir\file7.txt"), 
}; 

Sie müssen dann jeweils in 1022-Sequenzen von sieben Elementen jeweils die sieben Sequenzen von 1022 Zeilen schwenken:

public static class Extensions 
{ 
    public static IEnumerable<T[]> Pivot<T>(this IEnumerable<IEnumerable<T>> source) 
    { 
     if (source == null) throw new ArgumentNullException("source"); 
     return PivotIterator(source); 
    } 

    private static IEnumerable<T[]> PivotIterator<T>(IEnumerable<IEnumerable<T>> source) 
    { 
     var enumerators = new List<IEnumerator<T>>(); 
     try 
     { 
      foreach (IEnumerable<T> item in source) 
      { 
       enumerators.Add(item.GetEnumerator()); 
      } 

      bool stillGoing = true; 
      while (stillGoing) 
      { 
       foreach (IEnumerator<T> item in enumerators) 
       { 
        if (!item.MoveNext()) 
        { 
         stillGoing = false; 
         break; 
        } 
       } 
       if (stillGoing) 
       { 
        var result = new T[enumerators.Count]; 
        for (int index = 0; index < enumerators.Count; index++) 
        { 
         result[index] = enumerators[index].Current; 
        } 

        yield return result; 
       } 
      } 
     } 
     finally 
     { 
      foreach (IDisposable item in enumerators) 
      { 
       item.Dispose(); 
      } 
     } 
    } 
} 

Dann the Enumerable.ToArray extension method rufen eine gezackte Array zu erhalten:

string[][] result = source.Pivot().ToArray(); 
+0

Das macht genau das, was ich brauchte. Danke – iMxAndyy

+0

Wenn es eine einfache Möglichkeit gibt, dies zu konvertieren, um ein int [] [] Array anstelle von String auszugeben? – iMxAndyy

+0

@iMxAndyy: Unter der Annahme, dass jede Zeile der Datei eine gültige Ganzzahl ist, können Sie die Elemente im Array 'source' in' File.ReadLines (@ "C: \ dir \ file1.txt") ändern. Where (line = >! string.IsNullOrEmpty (line)) .Wählen Sie (int.Parse) '. Wenn eine Zeile aus einer der Dateien nicht in eine Ganzzahl konvertiert werden kann, erhalten Sie eine Ausnahme. –

Verwandte Themen