将平面文件拆分为多个文件
Split flat file into multiple files
我需要创建一个包,将巨大的平面文件拆分成多个平面文件。
我有一个包含 2000 万行的平面文件,现在我需要拆分这个平面文件(每个平面文件需要有 55000 行)
示例:- 如果总共有 111 行,我将不得不创建 3 个文件。
file1.txt 将有 1-55 行
file2.txt 将有 55-110 行
file3.txt 将有 1 行
.
我有什么选择?
我正在为这个项目使用 Visual Studio 2012。
您可以尝试这样的方法...它非常简陋,我相信有人会指出它不会是最有效的方法,但它是一个可靠的选择。请注意,您将需要添加一些 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++;
}
}
}
另一种方法是在数据流中:
首先使用您选择的方法将 "Row Number" 列添加到您的数据流中(除非您的平面文件输出中已经有一个列,在这种情况下跳过此步骤并使用那个):
然后向您的数据流添加多播转换,并使用行号拆分流并将其发送到不同的目的地:
第 1 行 - 55k,-> 文件 1
第 55001 - 110k 行 -> 文件 2
等等
我需要创建一个包,将巨大的平面文件拆分成多个平面文件。
我有一个包含 2000 万行的平面文件,现在我需要拆分这个平面文件(每个平面文件需要有 55000 行)
示例:- 如果总共有 111 行,我将不得不创建 3 个文件。
file1.txt 将有 1-55 行 file2.txt 将有 55-110 行 file3.txt 将有 1 行 .
我有什么选择?
我正在为这个项目使用 Visual Studio 2012。
您可以尝试这样的方法...它非常简陋,我相信有人会指出它不会是最有效的方法,但它是一个可靠的选择。请注意,您将需要添加一些 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++;
}
}
}
另一种方法是在数据流中:
首先使用您选择的方法将 "Row Number" 列添加到您的数据流中(除非您的平面文件输出中已经有一个列,在这种情况下跳过此步骤并使用那个):
然后向您的数据流添加多播转换,并使用行号拆分流并将其发送到不同的目的地:
第 1 行 - 55k,-> 文件 1
第 55001 - 110k 行 -> 文件 2
等等