簡體   English   中英

將一個txt文件拆分為多個文件,每個文件中的行數可以由用戶設置

[英]split a txt file into multiple files with the number of lines in each file being able to be set by a user

好的,所以我在 c# 中寫了一些東西,我需要找到一種方法將文本文件拆分為更多文件,文件中的行數等於用戶輸入

前任。 文件 a 中有 1000 行我希望代碼向用戶詢問一個數字,然后使用該數字制作更多這樣的文件 a = 1000 行

然后在代碼運行后輸入 300

a = 300 行

b = 300 行

c = 300 行

d = 300 行

e = 300 行

然后它重復,直到原始文件被分割成更多的文件,全部有 300 行

這就是我到目前為止所擁有的

            var file = File.ReadAllLines(ofd.FileName);

            Console.Write("> ");
            int userlinestosplit = int.Parse(Console.ReadLine());

            ArrayList fileA = new ArrayList();
            for (int i = 0; i < userlinestosplit; i++)
            {
                string line = file[i];
                fileA.Add(line);
            }
            int linesleft = file.Length - userlinestosplit;

            ArrayList fileB = new ArrayList();
            for (int i = linesleft; i < file.Length; i++)
            {
                string line = file[i];
                fileB.Add(line);
            }

            string[] fileAArr = (string[])fileA.ToArray(typeof(string));
            string[] fileBArr = (string[])fileB.ToArray(typeof(string));

            string resdir = "results";
            string modir = "splited";

            Directory.CreateDirectory(resdir);
            Directory.SetCurrentDirectory(resdir);

            Directory.CreateDirectory(modir);
            Directory.SetCurrentDirectory(modir);

            File.WriteAllLines("FA.txt", fileAArr);
            File.WriteAllLines("FB.txt", fileBArr);
            Console.ReadKey();

任何幫助將不勝感激

這是一種使用流的方法。 這樣做的好處是不需要一次將其全部讀入 memory,從而可以處理非常大的文件。

Console.Write("> ");
var maxLines = int.Parse(Console.ReadLine());

var filename = ofd.FileName;
var fileStream = File.OpenRead(filename);
var readStream = new StreamReader(fileStream);

var nameBase = filename[0..^4]; //strip .txt

var parts = 1;
var notfinished = true;
while (notfinished)
{
    var part = File.OpenWrite($"{nameBase}-{parts}.txt");
    var writer =  new StreamWriter(part);
    for (int i = 0; i < maxLines; i++)
    {
        writer.WriteLine(readStream.ReadLine());
        if (readStream.EndOfStream)
        {
            notfinished = false;
            break;
        }
    }
    writer.Close();
    parts++;
}

Console.WriteLine($"Done splitting the file into {parts} parts.");

將文本文件拆分為多個部分

        public void SplitFile(string inputFile, int size, string path)
        {
            int index = 0;
            string s = string.Empty;
            using (StreamReader sr = File.OpenText(inputFile))
            {
                while (true)
                {
                    if (sr.EndOfStream) break;
                    using (StreamWriter output = new StreamWriter($"{path}\\part{index}.txt", false, Encoding.UTF8))
                    {
                        int linesRead = 0;
                        while ((s = sr.ReadLine()) != null && linesRead < size)
                        {
                            output.WriteLine(s);
                            linesRead++;
                        }                        
                    }
                    index++;
                }
            }
        }

如何使用:

  
var inputFile = "test.txt";
int size =300;
SplitFile(inputFile, size, "c:\\data");

暫無
暫無

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

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