代码之家  ›  专栏  ›  技术社区  ›  mehtat_90

将平面文件拆分为多个文件

  •  0
  • mehtat_90  · 技术社区  · 8 年前

    我需要创建一个包,将巨大的平面文件拆分为多个平面文件。

    我有一个有2000万行的平面文件,现在我需要拆分这个平面文件(每个平面文件需要有55 k行)

    示例:-如果总共有111行,我必须创建3个文件。

    file1.txt将有1-55行 file2.txt将有55-110行 file3.txt将有1行 .

    我有什么选择?

    我正在为此项目使用Visual Studio 2012。

    2 回复  |  直到 8 年前
        1
  •  1
  •   SFrejofsky    8 年前

    你可以尝试这样的方法……它相当初级,我相信有人会指出,它不会是最有效的方法,但它是一个可靠的选择。请注意,您需要添加一些try-catch错误处理。

                int recper = 0; // this is where you will assign the number of records per file 
                int reccount = 0;
                int filecount = 1;
                string filename = "testfilename";
                string networkDirectory = @"c:\fakepath\";
                string fileToRead = @"c:\fakepath\textfile.txt";
    
                using (StreamReader reader = new StreamReader(fileToRead,Encoding.Default,true))
                {
                    while (reader.Peek() > 0)
                    {
                        using (StreamWriter writer = new StreamWriter(Path.Combine(networkDirectory, filename + filecount + ".txt"), true, Encoding.Default))
                        {
                            writer.Write(reader.ReadLine());
                        }
                        reccount++;
                        // checks on each iteration of the while loop to see if the 
                        // current record count matches the number of records per file
                        // if sso reset reccount and change increment filecount to change the file name 
                        if (reccount == recper)
                        {
                            reccount = 0;
                            filecount++;
                        }
                    }
                }
    
        2
  •  1
  •   Tab Alleman    8 年前

    另一种方法是在数据流中执行此操作:

    首先使用您选择的方法将“行号”列添加到数据流中(除非平面文件输出中已有一列,在这种情况下,请跳过此步骤并使用它):

    https://www.google.com/search?sourceid=navclient&aq=&oq=add+rownumber+column+to+ssis+dataflow&ie=UTF-8&rlz=1T4GGNI_enUS551US551&q=add+rownumber+column+to+ssis+dataflow&gs_l=hp....0.0.0.6218...........0._Qm62-0x_YQ

    然后将MultiCast转换添加到数据流,并使用行号拆分流并将其发送到不同的目标:

    第1行-55k,->文件1

    第55001-110k行->文件2