Busco la forma de guardar uno datos en un txt los cuales deseo que este en
una sola fila, ejemplo de la recolección para guardar.
TextBox1 = 1 TextBox2 = Diego Santos TextBox3 = 18 sur 1023 TextBox4 = "ruta de sus archivos"
1 Diego Santo 18 sur 1023 D:\archivos_sr_Juan_S\
2 Carlos Herrera pueblo nuevo 1023 D:\archivos_sr_Carlos_H\
Una manera de juntar la información en una sola linea sería la siguiente:
Dim str As String = String.Format("{0};{1};{2};{3}", TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
lo que producirá el siguiente string
CSV-like:
índice;Nombre;Dirección?;C:\Ruta
y entonces podrás identificar cada campo saparándolos mediante el caracter delimitador ";":
Dim fields As String() = str.Split(";"c)
Dim index As String = fields(0)
Dim name As String = fields(1)
Dim address As String = fields(2)
Dim dirPath As String = fields(3)
...aunque algo mucho más apropiado sería definir un
type/contenedor personalizado donde almacenar dicha información, y serializarlo en lugar de guardarlo en un archivo de texto...
<Serializable>
<XmlRoot("PersonInfo")>
Public NotInheritable Class PersonInfo
<XmlElement("Index")> Public Index As Integer
<XmlElement("Name")> Public Name As String
<XmlElement("Address")> Public Address As String
<XmlElement("Dirpath")> Public Dirpath As String
<DebuggerNonUserCode>
Private Sub New()
End Sub
<DebuggerStepThrough>
Public Sub New(ByVal index As Integer, ByVal name As String, ByVal address As String, ByVal dirpath As String)
Me.Index = index
Me.Name = name
Me.Address = address
Me.Dirpath = dirpath
End Sub
<DebuggerStepThrough>
Public Overrides Function ToString() As String
Return String.Format("{0};{1};{2};{3}", Me.Index, Me.Name, Me.Address, Me.Dirpath)
End Function
End Class
+
Public Module PersonInfoExtensions
<Extension>
<DebuggerStepThrough>
Public Sub SerializeTo(ByVal sender As List(Of PersonInfo), ByVal filepath As String)
Dim serializer As New XmlSerializer(GetType(List(Of PersonInfo)))
Dim bufferSize As Integer = 8192 ' 8 KB.
Using fs As New FileStream(filepath, FileMode.Create, FileAccess.Write, FileShare.Read, bufferSize)
serializer.Serialize(fs, sender)
End Using
End Sub
<Extension>
<DebuggerStepThrough>
Public Sub DeserializeFrom(ByRef sender As List(Of PersonInfo), ByVal filepath As String)
Dim serializer As New XmlSerializer(GetType(List(Of PersonInfo)))
Dim bufferSize As Integer = 8192 ' 8 KB.
Using fs As New FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize)
sender = DirectCast(serializer.Deserialize(fs), List(Of PersonInfo))
End Using
End Sub
End Module
Ejemplo de serialización:
Dim personInfo1 As New PersonInfo(CInt(TextBox1.Text), TextBox2.Text, TextBox3.Text, TextBox4.Text)
Dim personInfo2 As New PersonInfo(2, "Pepito", "24 norte 1023", "C:\Ruta de archivos")
Dim personInfoList As New List(Of PersonInfo)
personInfoList.AddRange({personInfo1, personInfo2})
personInfoList.SerializeTo("C:\Data.xml")
lo que producirá un documento Xml como este:
<?xml version="1.0"?>
<ArrayOfPersonInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PersonInfo>
<Index>1</Index>
<Name>Diego Santos</Name>
<Address>18 sur 1023</Address>
<Dirpath>C:\Ruta de archivos</Dirpath>
</PersonInfo>
<PersonInfo>
<Index>2</Index>
<Name>Pepito</Name>
<Address>24 norte 1023</Address>
<Dirpath>C:\Ruta de archivos</Dirpath>
</PersonInfo>
</ArrayOfPersonInfo>
Ejemplo de deserialización:
Dim personInfoList As New List(Of PersonInfo)
personInfoList.DeserializeFrom("C:\Data.xml")
For Each personInfo As PersonInfo In personInfoList
Console.WriteLine(personInfo.ToString()) ' ToString() = índice;Nombre;Dirección?;C:\Ruta
Next personInfo
Resultado de ejecución del ejemplo de deserialización:
1;Diego Santos;18 sur 1023;C:\Ruta de archivos
2;Pepito;24 norte 1023;C:\Ruta de archivos
Saludos