簡體   English   中英

讀取和寫入特定行到文本文件 C#

[英]Reading and Write specific lines to text file C#

我有一個名為 FileName 的主文件,其中包含人員 ID。 它是按順序排列的。 我想將 ID 分成 27 個塊並將每個塊復制到不同的文本文件中。

using (FileStream fs = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
         {
            string line;
      int numOfLines = File.ReadAllLines(FileName).Length;  -- I have 73467
       int eachSubSet = (numOfLines / 27);
       var lines = File.ReadAllLines(dataFileName).Take(eachSubSet);
       File.WriteAllLines(FileName1,lines);
      }

我有 27 個不同的文本文件。 所以我希望將 73467 個 ID 均分並復制到 27 個不同的文件中。 因此,第一個文件的 ID#1 到 ID#2721 第二個文件的 ID#2722 到 ID#(2722+2721) 等等。 我不知道如何自動執行此操作並快速運行。

謝謝人力資源

最簡單的方法是在循環內運行 File.ReadLine 和 WriteLine 並決定哪個文件將接收哪一行。

我不建議你並行化這個例程,因為它是一個 IO 操作,但只是行的副本會非常快。

請注意,在您的示例代碼中,您兩次調用 File.ReadAllLines,因此您實際上對整個輸入文件進行了兩次解析。 因此,避免這樣做應該會加快進程,而且您實際上並沒有拆分文件,您只編寫了 27 個文件中的第一個文件。未經測試,但應該可以使用以下方法:

const int numOfFiles = 27;
string[] lines = File.ReadAllLines(FileName);
int numOfLines = lines.Length;
int eachSubSet = numOfLines/numOfFiles;
int firstSubset = numOfLines%numOfFiles + eachSubSet;
IEnumerable<string> linesLeftToWrite = lines;
for (int index = 0; index < numOfFiles; index++)
{
    int numToTake = index == 0 ? firstSubset : eachSubSet;
    File.WriteAllLines(string.Format("{0}_{1}.txt", FileName, index), linesLeftToWrite.Take(numToTake));
    linesLeftToWrite = linesLeftToWrite.Skip(numToTake);
}

暫無
暫無

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

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