Quel est le bon moyen de parcourir chaque ligne d'une chaîne multiligne sans utiliser beaucoup plus de mémoire (par exemple sans la diviser en un tableau)?
la source
Quel est le bon moyen de parcourir chaque ligne d'une chaîne multiligne sans utiliser beaucoup plus de mémoire (par exemple sans la diviser en un tableau)?
Je suggère d'utiliser une combinaison de StringReader
et ma LineReader
classe, qui fait partie de MiscUtil mais également disponible dans cette réponse StackOverflow - vous pouvez facilement copier uniquement cette classe dans votre propre projet utilitaire. Vous l'utiliseriez comme ceci:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Bouclez toutes les lignes dans un ensemble de données de chaîne (que ce soit un fichier ou autre) est si commun qu'il ne devrait pas exiger que le code appelant à tester pour null etc :) Cela dit, si vous ne voulez faire une boucle manuelle, c'est la forme que je préfère généralement à celle de Fredrik:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
De cette façon, vous ne devez tester la nullité qu'une seule fois, et vous n'avez pas non plus à penser à une boucle do / while (ce qui, pour une raison quelconque, me demande toujours plus d'efforts à lire qu'une boucle while directe).
Vous pouvez utiliser a StringReader
pour lire une ligne à la fois:
using (StringReader reader = new StringReader(input))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if (line != null)
{
// do something with the line
}
} while (line != null);
}
Je sais que cela a été répondu, mais j'aimerais ajouter ma propre réponse:
la source
depuis MSDN pour StringReader
la source
Voici un extrait de code rapide qui trouvera la première ligne non vide d'une chaîne:
la source
Pour mettre à jour cette ancienne question pour .NET 4, il existe maintenant un moyen beaucoup plus soigné:
la source
Essayez d'utiliser la méthode String.Split:
la source