Console application: Option Strict Off Imports System.IO Imports System.Xml Module Module1 Sub Main() Try Dim iStartPositions As Integer() = {0, 4, 5, 14} Dim sFixedWidthText As String = GetFileContents("C:\FixedWidthText.txt") Dim sw As New StringWriter Dim writer As New XmlTextWriter(sw) writer.WriteStartElement("Rows") Dim sRows As String() = sFixedWidthText.Split(vbCrLf) Dim iRow, iColumn As Integer Dim sRowText As String Dim al As ArrayList For iRow = 0 To sRows.Length - 1 writer.WriteStartElement("Row") sRowText = sRows(iRow) al = GetDelimitedTextArray(sRowText, iStartPositions) For iColumn = 0 To al.Count - 1 writer.WriteStartElement("Column" & iColumn) writer.WriteString(al(iColumn)) writer.WriteEndElement() Next writer.WriteEndElement() Next writer.WriteEndElement() SaveTextToFile(sw.ToString, "C:\FixedWidthText.xml") Console.WriteLine("File saved") Console.ReadLine() Catch ex As Exception Console.WriteLine(ex.ToString) Console.ReadLine() End Try End Sub Public Function GetDelimitedTextArray(ByVal sRowText As String, ByVal iStartPositions As Integer()) As ArrayList Dim al As New ArrayList Dim i As Integer Dim sColumnText As String For i = 0 To iStartPositions.Length - 1 If i = iStartPositions.Length - 1 Then sColumnText = sRowText.Substring(iStartPositions(i)) Else sColumnText = sRowText.Substring(iStartPositions(i), iStartPositions(i + 1) - iStartPositions(i)) End If al.Add(sColumnText) Next Return al End Function Public Function GetFileContents(ByVal FullPath As String) As String Dim sContents As String Dim oReader As New StreamReader(FullPath) sContents = oReader.ReadToEnd() oReader.Close() Return sContents End Function Public Sub SaveTextToFile(ByVal sData As String, ByVal FullPath As String) Dim oWriter As StreamWriter oWriter = New StreamWriter(FullPath) oWriter.Write(sData) oWriter.Close() End Sub End Module