Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Leer archivo + crear una tabla con ciertos campos

Estas en el tema de Leer archivo + crear una tabla con ciertos campos en el foro de .NET en Foros del Web. Buensa foreros! Me encuentro con el siguiente problema. Tengo en un archivo de texto cientos de lineas. Lo que quiero es leer ese archivo de ...
  #1 (permalink)  
Antiguo 19/04/2016, 05:00
 
Fecha de Ingreso: abril-2016
Ubicación: C:\Usuarios\isaac
Mensajes: 33
Antigüedad: 8 años, 7 meses
Puntos: 1
Leer archivo + crear una tabla con ciertos campos

Buensa foreros! Me encuentro con el siguiente problema. Tengo en un archivo de texto cientos de lineas.

Lo que quiero es leer ese archivo de texto (eso lo he conseguido), una vez leído, me coja ciertas lineas, por ejemplo, quiero que me muestre solo las lineas que contienen: "CampoGraba=%", "MaxLength=%" y "TipoDato=%"

Como haría para conseguir filtrar ese archivo de texto para sacar esos datos, y después, poder organizarlos en formato tabla? Ej:

CampoGraba | MaxLength | tipoDato

1 30 Caracter
2 20 Integer

Aqui os dejo el código para que vayáis mirando lo poco que tengo realizado:
Código vb:
Ver original
  1. Imports System
  2. Imports System.IO
  3. Imports System.Text
  4. Module Module1
  5.     Sub Main()
  6.         'Primero leeremos el fichero en busca de los parámetros "x"
  7.        Dim lector As New StreamReader("C:\Program Files (x86)\Distribucion\mscr\mscr_037.msc")
  8.         Dim linea As String = ""
  9.         Dim texto As New ArrayList()
  10.  
  11.         Do
  12.             linea = lector.ReadLine()
  13.             If Not linea Is Nothing Then
  14.                 texto.Add(linea)
  15.             End If
  16.         Loop Until linea Is Nothing
  17.         lector.Close()
  18.         For Each linea In texto
  19.             Console.WriteLine(linea)
  20.         Next
  21.         Console.ReadLine()
  22.     End Sub
  23. End Module


Si no me he explicado muy bien decídmelo.

Muchas gracias por vuestro tiempo y un saludo.
__________________
"He intentado cambiar el mundo, pero no he encontrado el código fuente"
  #2 (permalink)  
Antiguo 19/04/2016, 08:36
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Leer archivo + crear una tabla con ciertos campos

Hola isaac26lopez

Serviria mucho si no es problema, un ejemplo de tu TXT o de los datos que contiene el TXT, por que no entiendo a que te refieres con "CampoGraba=%", "MaxLength=%" y "TipoDato=%" son datos que vienen en el txt? como es la estructura de el txt, y por ultimo, eso que organizas en forma de tabla, se guardara en otro txt o se mostrara en la consola? un datatable?

Saludos
__________________
http://binarysuns.com.mx/

Última edición por Namiwis; 19/04/2016 a las 08:45
  #3 (permalink)  
Antiguo 19/04/2016, 08:47
 
Fecha de Ingreso: abril-2016
Ubicación: C:\Usuarios\isaac
Mensajes: 33
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Leer archivo + crear una tabla con ciertos campos

Hola namiwis

Antes de nada, muchas gracias por responder. Tras haberle dado muchas vueltas en unas cuantas horas, he llegado a la siguiente conclusión:

En vez de hacerlo mediante consola, lo estoy intentado hacer con un formulario de windows. También añadir que lo intento con un "dataGridView" el cuál aun así me sigue dando problemas (porque todavía soy novato en esto del visual basic).

Volviendo al asunto, te voy a poner un buen trozo del .txt en cuestión:

Código .txt:
Ver original
  1. [1]
  2. MaxLength=30
  3. Defini=Tipo de documento
  4. ClaseCamp=Input
  5. TipoDato=Caracter
  6. CampoGraba=1
  7. Item=@RESVENTAS
  8. Ayuda=Solo saldrán los tipos de documento que tengan definida serie
  9. Imprescindible=Si
  10. PDAVISIBLE=SI
  11.  
  12. [2]
  13. MaxLength=2
  14. Defini=Serie albarán
  15. ClaseCamp=Input
  16. TipoDato=Caracter
  17. CampoGraba=2
  18. ItemSource=DataBaseName:BaseGes32;TableName:tSeriesAlbaranes;IndexField:0;
  19. Modificable=No
  20. CuadraIzquierda=48
  21. Ayuda=Son las series definidas para el tipo de documento seleccionado
  22. Imprescindible=Si
  23. PDAVISIBLE=SI

Como bien se puede observar, yo solo quiero coger ciertas "filas", es por ello que he recurrido a este código (algo chapuzas, lo sé):

Código vb:
Ver original
  1. Imports System.IO
  2. Public Class Form1
  3.     Dim celdas(4) As String
  4.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.         Dim mascara As System.IO.FileInfo = New FileInfo("C:\Program Files (x86)\Distribucion\mscr\mscr_037.msc")
  6.         tabla.ColumnCount = 4
  7.         tabla.Columns(0).Name = "CAMPO"
  8.         tabla.Columns(1).Name = "TIPO"
  9.         tabla.Columns(2).Name = "TAMAÑO MAXIMO"
  10.         tabla.Columns(3).Name = "DEFINICION"
  11.         Dim tablabd(2) As String
  12.         Dim i As Integer = 0
  13.         'Primero sacaremos las tablas para luego poderlas asociarlas a los campos
  14.        Try
  15.             Dim abrir2 As StreamReader = mascara.OpenText
  16.             Dim linea2 As String
  17.             Do While abrir2.Peek() > 0
  18.                 linea2 = abrir2.ReadLine()
  19.                 If linea2 Like "FicheroDatos=*" Then
  20.                     tablabd(i) = Replace(linea2, "FicheroDatos=", "")
  21.                     i = i + 1
  22.                 End If
  23.             Loop
  24.         Catch ex As Exception
  25.  
  26.         End Try
  27.         MessageBox.Show(tablabd(1))
  28.         Try
  29.             Dim abrir As StreamReader = mascara.OpenText
  30.             Dim linea As String
  31.             Do While abrir.Peek() > 0
  32.                 linea = abrir.ReadLine()
  33.                 If linea Like "CampoGraba*=*" Then
  34.                     If linea Like "CampoGraba(%)=*" Then
  35.                         Dim reemplazo As String = Replace(linea, "CampoGraba(%)=", tablabd(1))
  36.                         celdas(0) = reemplazo
  37.                     Else
  38.                         Dim reemplazo As String = Replace(linea, "CampoGraba=", tablabd(0))
  39.                         celdas(0) = reemplazo
  40.                     End If
  41.                 End If
  42.                 If linea Like "TipoDato*=*" Then
  43.                     Dim reemplazo As String = Replace(linea, "TipoDato=", "")
  44.                     celdas(1) = reemplazo
  45.                 End If
  46.                 If linea Like "MaxLength*=*" Then
  47.                     Dim reemplazo As String = Replace(linea, "MaxLength=", "")
  48.                     celdas(2) = reemplazo
  49.                 End If
  50.                 If linea Like "Defini*=*" Then
  51.                     Dim reemplazo As String = Replace(linea, "Defini=", "")
  52.                     celdas(3) = reemplazo
  53.                 End If
  54.                 If Not celdas(3) Is Nothing Then
  55.                     Dim lineaCompleta As String() = New String() {celdas(0), celdas(1), celdas(2), celdas(3)}
  56.                     tabla.Rows.Add(lineaCompleta)
  57.                 End If
  58.             Loop
  59.             abrir.Close()
  60.         Catch ex As SystemException
  61.             MsgBox(ex.Message)
  62.         End Try
  63.     End Sub
  64. End Class

Bien, te vuelvo a explicar un poco lo que estoy haciendo y lo que quiero conseguir: ahora ha cambiado un poco el enfoque.

He conseguido que se muestre en un datagridview, pero con los siguientes problemas: el primero, se me repite unas diez veces y de forma desordenada los campos que he seleccionado de ese fichero de texto (los coge bien, pero los sitúa mal en el datagridview y encima algunas de esas repeticiones se mezclan con los campos siguientes).

Enlace a una captura donde se muestra: https://gyazo.com/a30d42de4a1ae15ad26808f9966e9f9f

El siguiente problema que tengo es que en la columna donde irían los "CampoGraba" quiero que se muestre para los X campoGraba con el prefijo de una tabla, y para los siguientes campograbas que se muestre con el prefijo de la otra tabla (se que este ultimo punto no me he explicado bien, asi que si no se puede conseguir tampoco pasa nada, es algo opcional para que a mi me resulte mas facil consultar).

Bien, mas o menos queda "algo" explicado los avances que he conseguido, con los correspondientes problemas a mayores que también he conseguido.

un saludo y espero que pueda echarme un cable
__________________
"He intentado cambiar el mundo, pero no he encontrado el código fuente"

Etiquetas: campos, ciertos, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:02.