elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Texto a arrays [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Texto a arrays [SOLUCIONADO]  (Leído 2,299 veces)
rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Texto a arrays [SOLUCIONADO]
« en: 5 Abril 2011, 18:20 pm »

Hola a todos, necesito un poco de orientación en un proceso que no puedo solucionar.

Resulta que tengo un archivo de texto con miles de lineas con el siguiente formato (este lo genera un sistema que no puedo cambiar):
Citar
00304-001    1042X250X131MM(150)51B/CK *750 84-0070      00304-001            1,440   1           600   2           300         1,740
00304-002    507X257X131(150)51 B/C K *450  84-0061      00304-002                0   4         1,050   1           150           900
00304-003    507X252X258MM (150)51BCK *450  84-0020      00304-003            1,200   0             0   2           300           900
00304-006    1042X507X256(75)51 B/C K *225  84-0058      00304-006              402   0             0   0             0           402
00304-012    1500X793 (200) 32 C K  *400    84-0146      00304-012              730   0             0   1           200           530

La idea es pasarlos a un listview para luego trabajar con los datos. El detalle es que no logro separar cada linea en las 9 columnas, ya que la separación no es un tab, si no que son espacios variables, por lo tanto split() no me sirvió.

Este es el codigo que tengo, pero me lo carga todo en una sola columna, ya que no me respeta el split:
Código
  1. Dim linea As String
  2.    Dim division() As String
  3.    Dim i As Integer
  4.    Dim r As String
  5.    Dim subE As ListItem
  6.    Open "C:\INV320.TXT" For Input As #1
  7.    While Not EOF(1)
  8.        Line Input #1, linea
  9.        division = Split(linea)
  10.        r = Mid(division(0), 1, 1)
  11.        If r = "0" Then
  12.            Set subE = ListView1.ListItems.Add(, , division(0))
  13.            For i = 1 To UBound(division)
  14.                subE.SubItems(i) = division(i)
  15.            Next
  16.        End If
  17.    Wend
  18.    Close #1

Y esta es la salida:
 

Saludos


« Última modificación: 7 Abril 2011, 06:55 am por rob1104 » En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: Texto a arrays
« Respuesta #1 en: 5 Abril 2011, 19:08 pm »

*Una forma sería usando [Bucle + Replace()] en cada linea para que te quede todo separado por un solo espacio.
*Otra sería usando RegExp, con algo así, si no me equivoco:
Código:
\s*(\S+)\s*


A parte de eso, usas mal el Split(), si te fijas, no pusiste delimitador. :rolleyes:

DoEvents! :P



« Última modificación: 5 Abril 2011, 19:13 pm por Mr.Frog™ » En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: Texto a arrays
« Respuesta #2 en: 5 Abril 2011, 19:28 pm »

Gracias por responder, intentaré lo de las Exp Reg que no se me habia ocurrido.

Lo del split(), lo use de diferentes formas, pero al ultimo lo deje asi al copiar el codigo. Pero de la forma que lo tenia era:
division = Split(linea,vbTab)

Bueno, probaré y les cuento. Gracias
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: Texto a arrays
« Respuesta #3 en: 6 Abril 2011, 01:42 am »

esto es facil, el archivo tiene definido un largo fijo para cada campo, con un Mid() lo solucionas, o sea desde la posicion 0 a la 13 tenes el codigo, de la 14 a la 25 la descripcion etc...con eso ya lo tenes.

saludos.
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
Sanlegas

Desconectado Desconectado

Mensajes: 131


https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-


Ver Perfil
Re: Texto a arrays
« Respuesta #4 en: 6 Abril 2011, 02:34 am »

Primero elimina los dobles espacios  :P
Código
  1. Do While cbool(instr(MisDatos,"  ")) ' mientras haya doble espacio
  2. MisDatos = replace(Misdatos,"  "," ")  'remplazamos los dobles espacios por uno solo
  3. loop
  4. Partes() = Split(MisDatos,vbnewline) ' primero se parten por lineas
  5. for i = 0 to ubound(Partes()) - 1
  6. SubPartes() = Split(Partes(i)," ") 'partimos por los espacios y tenemos los datos...
  7. next
  8.  

En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: Texto a arrays
« Respuesta #5 en: 6 Abril 2011, 17:28 pm »

Muchas gracias a todos.

Logré solucionarlo gracias a la idea de seba123neo.

Al final el codigo quedó asi:
       
Código
  1. Dim linea As String, archivo As String, division(6) As String, aux As String
  2.        Dim i As Integer
  3.        Dim subE As ListItem
  4.        archivo = Trim(OFName.lpstrFile)
  5.        Open archivo For Input As #1
  6.        While Not EOF(1)
  7.            Line Input #1, linea
  8.            aux = Mid(linea, 1, 1)
  9.            division(0) = Trim(Mid(linea, 1, 13)) 'Caja
  10.            division(1) = Trim(Mid(linea, 14, 31)) 'Descripcion
  11.            division(2) = Trim(Mid(linea, 45, 13)) 'Caja/Cliente
  12.            division(3) = Trim(Mid(linea, 59, 13)) 'Producto
  13.            division(4) = Trim(Mid(linea, 72, 13)) 'Exi. Actual
  14.            division(5) = Trim(Mid(linea, 85, 20)) 'Peso
  15.            division(6) = Trim(Mid(linea, 106, 20)) 'Precio
  16.  
  17.            If aux = "0" Then
  18.                Set subE = lv.ListItems.Add(, , division(0))
  19.                For i = 1 To UBound(division)
  20.                    subE.SubItems(i) = division(i)
  21.                Next
  22.            End If
  23.        Wend
  24.        Close #1

Saludos
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] Duda sobre ¿Arrays? [Solucionado]
Scripting
Karcrack 3 4,080 Último mensaje 4 Febrero 2011, 15:44 pm
por Edu
[Solucionado] Comparando 2 arrays
PHP
aaronduran2 2 1,463 Último mensaje 11 Febrero 2012, 08:09 am
por aaronduran2
(solucionado) Problemas de acceso en un archivo de texto
.NET (C#, VB.NET, ASP)
Eleкtro 0 1,052 Último mensaje 22 Noviembre 2012, 11:30 am
por Eleкtro
(Solucionado) Suma de Arrays
Programación C/C++
dennis094 0 573 Último mensaje 19 Enero 2014, 19:11 pm
por dennis094
(Solucionado) Variar números en A arrays.
Programación General
Tachikomaia 1 422 Último mensaje 13 Noviembre 2019, 17:34 pm
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines