Página 1 de 1

pasar de txt a array separando campos o a Excel directamente

Publicado: 08 Sep 2014, 19:01
por qpongo
Hola, muy buenas a todos.

Atención atención… pregunta…. :smt001 a ver si podéis ayudarme:

Tengo un archivo .txt separado por “|” que necesito pasarlo a un Array y después dependiendo del contenido de cada uno de los campos separarlo en varios Excels.

Sé que los datos los puedo poner en un Array usando _FileReadToArray

Código: Seleccionar todo

#include <Excel.au3>
#include <Array.au3>
#include <File.au3>
Local $Datos
_FileReadToArray("c:\ruta\archivo.txt",$Datos)
_ArrayDisplay($Datos)
Pero claro con esto lo que hago es meter toda la línea junta en vez de ponerla separada en campos y lo que necesito es separar los campos para poder usarlos.

Luego tendré que separar estos datos en unas 18 hojas Excel(dependiendo del contenido de los campos) pero teniendo el Array con los datos separados ya se hacerlo)

Con ver un ejemplo (no encuentro) en alguna parte creo que me podría valer, o como poco saber que funciones tengo que usar.

¡¡Gracias como siempre por vuestra ayuda!!

Jose

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 08 Sep 2014, 21:09
por Dany
Usa stringsplit.


algo asi deberia servir.

Código: Seleccionar todo

#include <Array.au3>

local $aArray=stringsplit(Fileread("tuarchivo.txt"),"|")

_arraydisplay($aArray)

Saludos

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 08 Sep 2014, 21:21
por qpongo
Pues si que parece fácil! !!
Muchísimas gracias Dany! !!

José

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 12:28
por qpongo
ejemplo.zip
Archivo de ejemplo
(748 Bytes) Descargado 173 veces
Dany escribió:Usa stringsplit.


algo asi deberia servir.

Código: Seleccionar todo

#include <Array.au3>

local $aArray=stringsplit(Fileread("tuarchivo.txt"),"|")

_arraydisplay($aArray)

Saludos
Dany, el problema es que en vez de separarlo por columnas (campos) lo separa todo por filas (registros), o sea que pone todos los datos en la columna cero, no se si me entiendes.
Cada "|" debería ser una columna o campo diferente en el Array y el final de la línea del txt supondría una fila o registro nuevo.

Te pongo un .txt de ejemplo para que me entiendas porque no se si me explico muy bien.

Gracias,

Jose

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 14:49
por Dany
aaa ya entiendo. la primera linea tambien va?


ya te paso un ejemplo.

Editado:

Código: Seleccionar todo

#include <Array.au3>
Local $aArray=FileReadToArray("ejemplo.txt")

Local $iFil=UBound($aArray)-1
Local $iCol=StringSplit($aArray[0],"|")[0]-1


Local $aArray2D[$iFil][$iCol]
Local $aSplit=0
For $f=0 To $iFil-1
If Not(StringLen($aArray[$f])<=1) Then
	$aSplit=StringSplit($aArray[$f],"|")
	For $c=0 to $iCol-1
		$aArray2D[$f][$c]=$aSplit[$c+1]
	Next
	ConsoleWrite(StringLen($aArray[$f]) & "  " & $aArray[$f] & @CRLF)
EndIf
Next
_ArrayDisplay($aArray2D)
Saludos

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 17:10
por qpongo
Gracias Dany,

Veo que ahora me entiendes...sí

La primera línea en principio prefiero tenerla para luego ponerla como nombre de cada campo, pero si incordia pasamos de ella; no es importante.

He añadido el #include>File.au3> pero de todas formas faltaría algo en _FileReadToArray da error y la verdad es que no se como se arregla :-(

Código: Seleccionar todo

#include <Array.au3>

#include <File.au3>; faltaba para usar _FileReadToArray

Local $aArray=_FileReadToArray("ejemplo.txt"); Da error esta línea,  faltaría un parámetro, que no se cual sería.

Local $iFil=UBound($aArray)-1
Local $iCol=StringSplit($aArray[0],"|")[0]-1


Local $aArray2D[$iFil][$iCol]
Local $aSplit=0
For $f=0 To $iFil-1
If Not(StringLen($aArray[$f])<=1) Then
   $aSplit=StringSplit($aArray[$f],"|")
   For $c=0 to $iCol-1
      $aArray2D[$f][$c]=$aSplit[$c+1]
   Next
   ConsoleWrite(StringLen($aArray[$f]) & "  " & $aArray[$f] & @CRLF)
EndIf
Next
_ArrayDisplay($aArray2D)

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 18:00
por Dany
usa FileReadToArray. no _FileReadToArray.


es una función predefinida de autoit.

saludos

que versión tienes?

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 18:15
por qpongo
Uso una Portable, para evitar problemas de instalaciones y permisos y quizá esté un poco antigua por lo que me dices. Luego lo pruebo con otra versión... perdona...

Jose

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 18:32
por Dany
Lo hubieses mencionado antes.

Código: Seleccionar todo

#include <Array.au3>
#include <File.au3>
Local $aArray=0
_FileReadToArray("ejemplo.txt",$aArray)

Local $iFil=$aArray[0]-1
Local $iCol=StringSplit($aArray[1],"|")[0]-1


Local $aArray2D[$iFil][$iCol]
Local $aSplit=0
For $f=0 To $iFil-1
If Not(StringLen($aArray[$f+1])<=1) Then
   $aSplit=StringSplit($aArray[$f+1],"|")
   For $c=0 to $iCol-1
      $aArray2D[$f][$c]=$aSplit[$c+1]
   Next
;~    ConsoleWrite(StringLen($aArray[$f+1]) & "  " & $aArray[$f] & @CRLF)
EndIf
Next
_ArrayDisplay($aArray2D)

Saludos

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 09 Sep 2014, 22:26
por qpongo
Ni me di cuenta del tema de las versiones... perdona.. ahora parece que va, muchas gracias como siempre por tu ayuda.

Jose

Re: pasar de txt a array separando campos o a Excel directam

Publicado: 10 Sep 2014, 14:57
por Dany
Un gusto como siempre.

saludos :smt027