Eine Datei zeilenweise in C # lesen
Ich versuche, einige Textdateien zu lesen, in denen jede Zeile verarbeitet werden muss. Im Moment benutze ich nur einen StreamReader und lese dann jede Zeile einzeln.
Ich frage mich, ob es eine effizientere Möglichkeit gibt (in Bezug auf LoC und Lesbarkeit), dies mit LINQ zu tun, ohne die betriebliche Effizienz zu beeinträchtigen. In den Beispielen, die ich gesehen habe, wird die gesamte Datei in den Speicher geladen und dann verarbeitet. In diesem Fall glaube ich jedoch nicht, dass dies sehr effizient wäre. Im ersten Beispiel können die Dateien bis zu 50 KB groß werden, und im zweiten Beispiel müssen nicht alle Zeilen der Datei gelesen werden (die Größe beträgt normalerweise <10 KB).
Man könnte argumentieren, dass es heutzutage für diese kleinen Dateien nicht wirklich wichtig ist, aber ich glaube, dass ein solcher Ansatz zu ineffizientem Code führt.
Erstes Beispiel:
// Open file
using(var file = System.IO.File.OpenText(_LstFilename))
{
// Read file
while (!file.EndOfStream)
{
String line = file.ReadLine();
// Ignore empty lines
if (line.Length > 0)
{
// Create addon
T addon = new T();
addon.Load(line, _BaseDir);
// Add to collection
collection.Add(addon);
}
}
}
Zweites Beispiel:
// Open file
using (var file = System.IO.File.OpenText(datFile))
{
// Compile regexs
Regex nameRegex = new Regex("IDENTIFY (.*)");
while (!file.EndOfStream)
{
String line = file.ReadLine();
// Check name
Match m = nameRegex.Match(line);
if (m.Success)
{
_Name = m.Groups[1].Value;
// Remove me when other values are read
break;
}
}
}