none
ARRAY MULTIDIMENSIONAL PARA FICHERO TXT RRS feed

  • Pregunta

  • Buenas tardes caballeros.

    Sigo avanzando en el proyecto, ahora se me plantea una mejora que no se muy bien como enfocar.

    tengo un txt que voy rellenando desde varios textbox con el separador de campo (*):

    campo1*campo2*campo3*campo4*campo5*campo6*campo7*campo8

    juana*linea1juana*linea3*numero1*num2*madrid*calle*constitucion

    Así hasta 100 filas máximo.

    Ahora me gustaría que si quiero añadir un registro, que tiene el campo 1 igual que algún otro campo (nombre), recorra el txt, y me diga si esta. Si lo esta que me pregunte si quiero sobreescribirlo, y si le digo que si sobreescribirlo en la misma posición, o al final del txt al menos borrando la fila repetida antes de sobreescribirlo.

    He pensado en un array multidimensional para intentarlo, pero no sé como plasmarlo ....

    jueves, 17 de diciembre de 2015 16:00

Respuestas

  • Podrías utilizar TextFieldParser para crear una función para la lectura y un StreamWriter para la escritura:

        Private Function ReadData() As List(Of String())
            Dim parser As New TextFieldParser(Path.Combine(Application.StartupPath, "datos.txt"))
            parser.Delimiters = New String() {"*"}
            parser.TextFieldType = FieldType.Delimited
            Dim datos As New List(Of String())
            While Not parser.EndOfData
                datos.Add(parser.ReadFields())
            End While
            Return datos
        End Function
    
        Private Sub WriteData(data As List(Of String()))
            Dim writer As New StreamWriter(Path.Combine(Application.StartupPath, "datos.txt"), False)
            For Each fields As String() In data
                writer.WriteLine(String.Join("*", fields))
            Next
            writer.Close()
        End Sub
    

    Así a la hora de guardar simplemente tendrías que recuperar la lista del fichero, comprobar si existe el registro con el nombre, sobrescribir o añadir el registro en la lista y llamar al método de escritura:

            Dim datosAGuardar As String() = {"Asier", "dato1", "dato2", "dato3", "dato4", "dato5", "dato6", "dato7"}
            Dim data As List(Of String()) = ReadData()
    
            Dim registroExistente = data.FindIndex(Function(x) x(0) = datosAGuardar(0))
            If registroExistente >= 0 Then
                If MsgBox(String.Format("Ya existe el registro {0}. ¿Desea sobrescribirlo?", datosAGuardar(0)), MsgBoxStyle.YesNo) = MsgBoxResult.No Then
                    Return   ' No sobrescribir
                End If
                data(registroExistente) = datosAGuardar ' Sobrescribir registro
            Else
                data.Add(datosAGuardar) ' añadir nuevo registro
            End If
            WriteData(data)


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    jueves, 17 de diciembre de 2015 19:53