Sie teilen sich anschauen sollten eine potenziell effizientere Implementierung, die Dateien online generiert, ohne alle Blöcke in den Speicher zu schreiben.
Da einige IEnumerator
:
static IEnumerator<string> DataStream()
{
var original = "Tx1\nsome data1\nsome data2\nTx2\nsome data3\nsome data4\nTx3\nsome data5\nsome data6\nTx4\nTx5";
Console.WriteLine("Original: {0}", original);
return ((IEnumerable<string>) original.Split('\n')).GetEnumerator();
}
Sie können alle Ihre Dateien in einem einzigen Durchgang aufzubauen. Legen Sie einige predicate function, die für Ihre Tx^[0-9]
Fall true zurück (man beachte dies leicht mit einem regulären Ausdruck ersetzt werden kann):
Func<string, bool> isDelimiterString = token =>
token.Length > 2
&& token[0] == 'T'
&& token[1] == 'x';
Ein Algorithmus direkt mit dem IEnumerator
Umgang:
var enumerable = DataStream();
var enumeratorHasNext = enumerable.MoveNext();
while (enumeratorHasNext)
{
var delimiter = enumerable.Current;
using (var file = new StreamWriter(delimiter + ".txt"))
{
enumeratorHasNext = enumerable.MoveNext();
while (enumeratorHasNext && !isDelimiterString(enumerable.Current))
{
file.WriteLine(enumerable.Current);
enumeratorHasNext = enumerable.MoveNext();
}
}
}
ich setzen Arbeitsbeispiel on Github.
Sind die 'Tx #' s wichtig oder nur Ihre Splitpunkte? – Chakrava
Wie groß ist die Datei? – D3C34C34D