簡體   English   中英

如何從文本文件c#中刪除第一行和最后一行?

[英]How to delete first and last line from a text file c#?

我在stackoverflow上發現了這個代碼,用於刪除文本文件中的第一行和最后一行。

但我沒有得到如何將這個代碼組合成一個,以便它將從一個文件中刪除第一行和最后一行?

我嘗試使用streamreader讀取文件,然后跳過第1行和最后一行,然后使用streamwriter寫入新文件,但無法獲得正確的結構。

刪除第一行。

var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray());

刪除最后一行。

   var lines = System.IO.File.ReadAllLines("...");
System.IO.File.WriteAllLines("...", lines.Take(lines.Length - 1).ToArray());

您可以鏈接SkipTake方法。 記得在Take方法中減去適當的行數。 您在開頭跳過的越多,剩余的線越少。

var filename = "test.txt";
var lines = System.IO.File.ReadAllLines(filename);
System.IO.File.WriteAllLines(
    filename, 
    lines.Skip(1).Take(lines.Length - 2)
);

雖然在這種情況下可能不是主要問題,但現有的答案都依賴於首先將文件的全部內容讀入內存。 對於小文件,這可能沒問題,但是如果你使用的是非常大的文件,這可能會讓人望而卻步。

創建SkipLast相當於現有的Skip Linq方法是相當簡單的:

public static class SkipLastExtension
{
    public static IEnumerable<T> SkipLast<T>(this IEnumerable<T> source, int count)
    {
        var queue = new Queue<T>();
        foreach (var item in source)
        {
            queue.Enqueue(item);
            if (queue.Count > count)
            {
                yield return queue.Dequeue();
            }
        }
    }
}

如果我們還定義了一個方法,允許我們枚舉文件的每一行而不預先緩沖整個文件(per: https//stackoverflow.com/a/1271236/381588 ):

static IEnumerable<string> ReadFrom(string filename)
{
    using (var reader = File.OpenText(filename))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}

然后我們可以使用下面的一行代碼來編寫一個新文件,其中包含原始文件中的所有行,除了第一個和最后一行:

File.WriteAllLines("output.txt", ReadFrom("input.txt").Skip(1).SkipLast(1));

這無疑是(相當多)代碼已經在此處發布的其他答案,但應該適用於基本上任何大小的文件,(以及為潛在有用的SkipLast擴展方法提供代碼)。

這是使用ArraySegment<string>的另一種方法:

var lines = File.ReadAllLines("test.txt");
File.WriteAllLines("test.txt", new ArraySegment<string>(lines, 1, lines.Length-2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM