2011-12-20 33 views
6

Więc tworzę listę linii w pliku tekstowym jak poniżej:Pierwsze dwa ostatnie wiersze w pliku tekstowym

var lines = File.ReadAllLines("C:\\FileToSearch.txt") 
       .Where(x => !x.EndsWith("999999999999")); 

i zapętlenie przez linie jak to

foreach (var line in lines) 
{ 
    if (lineCounter == 1) 
    { 
     outputResults.Add(oData.ToCanadianFormatFileHeader()); 
    } 
    else if (lineCounter == 2) 
    { 
     outputResults.Add(oData.ToCanadianFormatBatchHeader()); 
    } 
    else 
    { 
     oData.FromUsLineFormat(line); 
     outputResults.Add(oData.ToCanadianLineFormat()); 

    } 
    lineCounter = lineCounter + 1; 
    textBuilder += (line + "<br>"); 
} 

Similary jak ja dostęp do pierwszych dwóch wierszy Chciałbym uzyskać dostęp do ostatniego i drugiego ostatniego wiersza indywidualnie

+0

Zaproponowałem edycję dodającą do tego znacznik C#. Jest to pytanie o przetwarzanie plików tekstowych za pomocą C# - asp.net tak naprawdę nie wchodzi w równanie. – jadarnel27

Odpowiedz

11

Tutaj możesz ponownie skorzystać z LINQ:

var numberOfLinesToTake = 2; 
var lastTwoLines = lines 
    .Skip(Math.Max(0, lines.Count() - numberOfLinesToTake)) 
    .Take(numberOfLinesToTake); 

var secondToLastLine = lastTwoLines.First(); 
var lastLine = lastTwoLines.Last(); 

Albo, jeśli chcesz odzyskać je pojedynczo:

var lastLine = lines.Last(); 
var secondToLastLine = 
    lines.Skip(Math.Max(0, lines.Count() - 2)).Take(1).First(); 

dodałem .First() do końca, bo .Take(1) zwróci tablicę zawierającą jedną pozycję, którą następnie chwycić z First(). Prawdopodobnie można to zoptymalizować.

Ponownie, możesz chcieć zapoznać się z LINQ, ponieważ czasami jest to oszczędność czasu.

+1

Po prostu z ciekawości, czy '.Take()' naprawdę jest tutaj potrzebne? Czy '.Skip()' nie zwróci wszystkiego oprócz dwóch ostatnich anwyay? –

+0

@KileyNaro tak '.Skip()' zwróci wszystko, co jest potrzebne. Dodałem '.Take()', aby pojęcie było bardziej wyraźne. W moim drugim przykładzie zdecydowanie wymagane jest '.Take (1)'. –

0

Ten jeden z problemów związanych z używaniem var, gdy nie jest to właściwe.

ReadAllLines zwraca tablicę ciągów: string []

można uzyskać długość tablicy i wskaźnika wstecz od końca.

Powiązane problemy