[英]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.