Je suis en train de lire des fichiers texte où chaque ligne doit être traité. Pour le moment je suis juste en utilisant un StreamReader, et puis à la lecture de chaque ligne individuellement.
Je me demande si il existe un moyen plus efficace (en termes de LoC et la lisibilité) pour ce faire à l'aide de LINQ sans compromettre l'efficacité opérationnelle. Les exemples que j'ai vu impliquer le chargement de tout le fichier en mémoire, puis de les traiter. Cependant dans ce cas, je ne crois pas que ce serait très efficace. Dans le premier exemple, les fichiers peuvent obtenir jusqu'à environ 50k, et dans le deuxième exemple, toutes les lignes du fichier doit être lu (les tailles sont généralement < 10 km).
On pourrait dire que, de nos jours, il n'a pas vraiment d'importance pour ces petits fichiers, mais je crois que sorte de l'approche conduit à l'inefficacité de code.
Merci pour votre temps!
Premier exemple:
// 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);
}
}
}
Deuxième exemple:
// 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;
}
}
}