pasar de txt a array separando campos o a Excel directamente

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

pasar de txt a array separando campos o a Excel directamente

Mensaje 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
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

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

Mensaje por Dany »

Usa stringsplit.


algo asi deberia servir.

Código: Seleccionar todo

#include <Array.au3>

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

_arraydisplay($aArray)

Saludos
  • ............................................Imagen
    ......................................Imagen
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

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

Mensaje por qpongo »

Pues si que parece fácil! !!
Muchísimas gracias Dany! !!

José
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

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

Mensaje 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
Adjuntos
Ej Stringsplit.au3
Usando Stringsplit sale todo en la columna 0
(103 Bytes) Descargado 174 veces
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

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

Mensaje 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
  • ............................................Imagen
    ......................................Imagen
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

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

Mensaje 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)
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

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

Mensaje por Dany »

usa FileReadToArray. no _FileReadToArray.


es una función predefinida de autoit.

saludos

que versión tienes?
  • ............................................Imagen
    ......................................Imagen
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

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

Mensaje 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
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

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

Mensaje 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
  • ............................................Imagen
    ......................................Imagen
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

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

Mensaje por qpongo »

Ni me di cuenta del tema de las versiones... perdona.. ahora parece que va, muchas gracias como siempre por tu ayuda.

Jose
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

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

Mensaje por Dany »

Un gusto como siempre.

saludos :smt027
  • ............................................Imagen
    ......................................Imagen
Responder