Autor
|
Tema: Texto a arrays [SOLUCIONADO] (Leído 3,654 veces)
|
rob1104
Desconectado
Mensajes: 340
Usuario común
|
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): 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: Dim linea As String Dim division() As String Dim i As Integer Dim r As String Dim subE As ListItem Open "C:\INV320.TXT" For Input As #1 While Not EOF(1) Line Input #1, linea division = Split(linea) r = Mid(division(0), 1, 1) If r = "0" Then Set subE = ListView1.ListItems.Add(, , division(0)) For i = 1 To UBound(division) subE.SubItems(i) = division(i) Next End If Wend 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
Mensajes: 1.089
|
*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:
A parte de eso, usas mal el Split(), si te fijas, no pusiste delimitador. DoEvents!
|
|
« Última modificación: 5 Abril 2011, 19:13 pm por Mr.Frog™ »
|
En línea
|
|
|
|
rob1104
Desconectado
Mensajes: 340
Usuario común
|
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
|
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
|
|
|
|
Sanlegas
Desconectado
Mensajes: 131
https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-
|
Primero elimina los dobles espacios Do While cbool(instr(MisDatos," ")) ' mientras haya doble espacio MisDatos = replace(Misdatos," "," ") 'remplazamos los dobles espacios por uno solo loop Partes() = Split(MisDatos,vbnewline) ' primero se parten por lineas for i = 0 to ubound(Partes()) - 1 SubPartes() = Split(Partes(i)," ") 'partimos por los espacios y tenemos los datos... next
|
|
|
En línea
|
|
|
|
rob1104
Desconectado
Mensajes: 340
Usuario común
|
Muchas gracias a todos. Logré solucionarlo gracias a la idea de seba123neo. Al final el codigo quedó asi: Dim linea As String, archivo As String, division(6) As String, aux As String Dim i As Integer Dim subE As ListItem archivo = Trim(OFName.lpstrFile) Open archivo For Input As #1 While Not EOF(1) Line Input #1, linea aux = Mid(linea, 1, 1) division(0) = Trim(Mid(linea, 1, 13)) 'Caja division(1) = Trim(Mid(linea, 14, 31)) 'Descripcion division(2) = Trim(Mid(linea, 45, 13)) 'Caja/Cliente division(3) = Trim(Mid(linea, 59, 13)) 'Producto division(4) = Trim(Mid(linea, 72, 13)) 'Exi. Actual division(5) = Trim(Mid(linea, 85, 20)) 'Peso division(6) = Trim(Mid(linea, 106, 20)) 'Precio If aux = "0" Then Set subE = lv.ListItems.Add(, , division(0)) For i = 1 To UBound(division) subE.SubItems(i) = division(i) Next End If Wend 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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[BATCH] Duda sobre ¿Arrays? [Solucionado]
Scripting
|
Karcrack
|
3
|
5,504
|
4 Febrero 2011, 15:44 pm
por Edu
|
|
|
[Solucionado] Comparando 2 arrays
PHP
|
aaronduran2
|
2
|
2,306
|
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,905
|
22 Noviembre 2012, 11:30 am
por Eleкtro
|
|
|
(Solucionado) Suma de Arrays
Programación C/C++
|
dennis094
|
0
|
1,451
|
19 Enero 2014, 19:11 pm
por dennis094
|
|
|
(Solucionado) Variar números en A arrays.
Programación General
|
Tachikomaia
|
1
|
2,251
|
13 Noviembre 2019, 17:34 pm
por Tachikomaia
|
|