.net 通过拆分数据将一个文件转换为十个文件

.net 通过拆分数据将一个文件转换为十个文件,.net,vb.net,.net,Vb.net,我有一个超过10行的文件。我想创建9个文件,每个文件包含相同数量的行,第10个文件包含相同数量的行和剩余的行 我目前通过以下方式从主文件获取数据: Dim sData As String Using sr As New StreamReader(vsFilePath) sData = sr.ReadToEnd End Using Dim oDataList As New List(Of String) oDataList.AddRange(sData.Split(Convert.To

我有一个超过10行的文件。我想创建9个文件,每个文件包含相同数量的行,第10个文件包含相同数量的行和剩余的行

我目前通过以下方式从主文件获取数据:

Dim sData As String

Using sr As New StreamReader(vsFilePath)
    sData = sr.ReadToEnd
End Using

Dim oDataList As New List(Of String)
oDataList.AddRange(sData.Split(Convert.ToChar(ControlChars.Lf)))
如何将oDataList解析为10个文件,而不必遍历每个文件和oDataList逐行写入


有没有更好的方法让他们知道我目前正在做什么?

如果行的顺序不重要,您可以执行以下操作将内容分成10个相等的部分,否则,可能需要通过数据进行双循环(一个用于计数和存储行,另一个用于写入行)

Dim sData As String
Dim counter As Integer
Dim sw(10) As StreamWriter
For i As Integer = 0 To 9 Step 1
    sw(i) = New StreamWriter("path" + something)
Next

Using sr As New StreamReader("path")
    sData = sr.ReadLine()
    While sData IsNot Nothing
        sw(1 Mod counter).WriteLine(sData)
        counter += 1
        sData = sr.ReadLine
    End While
End Using

'add a finally block for closing the 10 streams
  • 打开10个输出文件
  • 重复输入文件中的每一行,执行以下操作:
    • 将行元素拆分为行元素,然后将其适当地切片
    • 对于每个切片,将其写入相应的文件

小提琴。您只需要遍历oDataList一次。

如果原始文件中的行数相对较少,则可以将它们全部读入一行代码中的数组中。从这里开始,生成10个输出文件是一个简单的操作。这里有一个这样的方法

Dim path As String = "C:\Temp\test\input.txt"
Dim outputPath As String = "C:\Temp\test\output{0}.txt"

Dim lines As String() = File.ReadAllLines(path)

Dim files As Integer = 10
Dim linesPerFile As Integer = lines.Length \ 10
Dim currentLine As Integer = 0

For i As Integer = 0 To files - 1
   Dim iterations As Integer = linesPerFile
   If i = files - 1 Then
       iterations = lines.Length - currentLine
   End If

   Using writer As New StreamWriter(String.Format(outputPath, i))
       For j As Integer = 0 To iterations - 1
            writer.WriteLine(lines(currentLine))
            currentLine += 1
       Next
   End Using
Next

stringpath=@“C:\Temp\test\input.txt”;
字符串outputPath=@“C:\Temp\test\output{0}.txt”;
string[]lines=File.ReadAllLines(路径);
int文件=10;
int linesPerFile=行。长度/10;
int currentLine=0;
对于(int i=0;i
行和行不是一样吗?请注意:
ControlChars.Lf
是一个
Char
,不需要转换成
Char
…结果表明顺序很重要。我把你的模型改成了同样的订单。谢谢
string path = @"C:\Temp\test\input.txt";
string outputPath = @"C:\Temp\test\output{0}.txt";

string[] lines = File.ReadAllLines(path);

int files = 10;
int linesPerFile = lines.Length / 10;
int currentLine = 0;

for (int i = 0; i < files; ++i)
{
    int iterations = linesPerFile;
    if (i == files - 1)
    {
        iterations = lines.Length - currentLine;
    }

    using (StreamWriter writer = new StreamWriter(string.Format(outputPath, i)))
    {
        for (int j = 0; j < iterations; j++)
        {
            writer.WriteLine(lines[currentLine++]);
        }
    }
}