2012-01-21 3 views
0

Je les lignes suivantes dans un fichier texte et j'ai besoin de savoir combien de lignes se terminent par un Y et combien de fin avec un N.lignes de comptage dans un fichier texte

il y a un espace après le Y et après N.

plus le mieux, car il peut contenir environ un million de lignes. (donc je préférerais ne pas boucler à travers toutes les lignes)

+1

Qu'avez-vous essayé? Quels problèmes éprouvez-vous? Et bien sûr, ** quelle est votre question **? – Oded

+1

Qu'est-ce qu'un fichier texte C#? Est-ce différent d'un fichier texte normal? –

Répondre

7

Eh bien, vous allez ont à boucle à travers chaque ligne, certainement. Il n'y a vraiment pas moyen de contourner cela. Vous pouvez ensuite utiliser LINQ pour les compter raisonnablement facilement:

var query = File.ReadLines("file.txt") 
       .Select(line => new { Y = line.EndsWith("Y ") ? 1 : 0, 
             N = line.EndsWith("N ") ? 1 : 0 }) 
       .Aggregate(new { Y = 0, N = 0 }, 
          (current, next) => new { Y = current.Y + next.Y, 
                N = current.N + next.N }); 

var yCount = query.Y; 
var nCount = query.N; 

S'il n'y a pas exactement un espace après le Y/N, changez d'utiliser à la place Trim() ... par exemple:

var query = File.ReadLines("file.txt") 
       .Select(line => line.Trim()) 
       .Select(line => new { Y = line.EndsWith("Y") ? 1 : 0, 
             N = line.EndsWith("N") ? 1 : 0 }) 
// remainder of code as before 

Ceci parcourra le fichier entier une seule fois, en comptant au fur et à mesure. Certes, il crée un lot d'objets, mais le GC est plutôt bon. Il ne pas tirer le fichier entier en mémoire, ou le lire deux fois.

+0

Puisqu'il y a des espaces à la fin des lignes, vous devez les "Trim" avant de les vérifier;) – Nuffin

+0

@Tobias: Comment savez-vous qu'il y a des espaces à la fin des lignes? ('File.ReadLines' n'inclut pas le séparateur de lignes, si c'est ce que vous pensiez de ...) –

+1

Le deuxième paragraphe de la question indique qu '" il y a un espace après le Y et après le N " – Nuffin

Questions connexes