nirmal90
on Feb 13, 2022 09:40 PM
3811 Views
I want to Split text file into multiple files based on header row.
Sample data (so each FILE| becomes its own datafile(n).txt file with the rows below in that file).
FILE|datafile1|25/04/17
25044|0001|37339|10380|TT75
25045|0001|37339|10398|TT75
25046|0001|78711|15940|TT75
FILE|datafile2|25/04/17
25047|0001|98745|11263|TT75
25048|0001|96960|13011|TT84
FILE|datafile3|25/04/17
25074|0001|57585|13639|TT84
25075|0001|59036|10495|TT84
FILE|datafile4|25/04/17
25076|0001|75844|13956|TT84
25077|0001|17430|01111|TT84
Download FREE API for Word, Excel and PDF in ASP.Net:
Download
arjunv
on Feb 13, 2022 11:59 PM
on Feb 14, 2022 04:11 AM
2
Hi nirmal90,
Please refer below sample.
HTML
<asp:Button Text="Split File" ID="btnSplit" OnClick="SpitDataFiles" runat="server" />
Namespace
C#
using System.IO;
VB.Net
Imports System.IO
Code
C#
protected void SpitDataFiles(object sender, EventArgs e)
{
string[] lines = File.ReadAllLines(Server.MapPath("~/Files/DataFiles.txt"));
string fileData = string.Empty;
for (int i = 0; i < lines.Length; i++)
{
string fileName = Server.MapPath("~/Files/DataFiles" + (i + 1) + ".txt");
string line = lines[i];
if (i == 0)
{
fileData += line + "\n";
}
else if (line.StartsWith("FILE") && i != 0)
{
File.WriteAllText(fileName, fileData);
fileData = string.Empty;
fileData += line + "\n";
}
else
{
fileData += line + "\n";
}
if (lines.Length == i + 1)
{
File.WriteAllText(fileName, fileData);
}
}
}
VB.Net
Protected Sub SpitDataFiles(ByVal sender As Object, ByVal e As EventArgs)
Dim lines As String() = File.ReadAllLines(Server.MapPath("~/Files/DataFiles.txt"))
Dim fileData As String = String.Empty
For i As Integer = 0 To lines.Length - 1
Dim fileName As String = Server.MapPath("~/Files/DataFiles" & (i + 1) & ".txt")
Dim line As String = lines(i)
If i = 0 Then
fileData += line & vbLf
ElseIf line.StartsWith("FILE") AndAlso i <> 0 Then
File.WriteAllText(fileName, fileData)
fileData = String.Empty
fileData += line & vbLf
Else
fileData += line & vbLf
End If
If lines.Length = i + 1 Then
File.WriteAllText(fileName, fileData)
End If
Next
End Sub
Screenshot
