Hola amigos,
Necesito hacer una rutina que convierta un archivo plano hecho en nuestro viejo Clipper a archivo en Excel, pero encolumnándolo.
Esta es una muestra del archivo plano:
Como saben el archivo plano pone cada línea con todo completo sin separadores de columnas. En cliente necesita que los valores estén en sus respecivas columnas para hacer cálculos con ellos. Llevo dándole una semana y no encuentro cómo hacerlo. El programa en Clipper arroja más de 50 informes, de entre 2 y 20 columnas y no tengo acceso a las fuentes El pasar el archivo a Excel lo hago con TExcelScrìpt, pero cómo identifico las columnas para que excel me las separe. Cualquier sugerencia o rutina mágica será agradecida de aquí a la eternidad.
Un abrazo,
Carlos Gallego
Archivo plano de Clipper a Excel
Archivo plano de Clipper a Excel
Saludos,
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Re: Archivo plano de Clipper a Excel
Carlos,
porque no lo haces separando _ con comas (,) y lo importas desde excel
guarda un archivo de excel en formato CSV y copia el formato que deja
Saludos,
Mauricio
porque no lo haces separando _ con comas (,) y lo importas desde excel
guarda un archivo de excel en formato CSV y copia el formato que deja
Saludos,
Mauricio
Re: Archivo plano de Clipper a Excel
Carlos,
Si mal no entiendo la única opcion que tienes es generar el excel a partir del fichero .txt; no tienes acceso a los fuentes.
Siendo esto asi, se trataria de purificar los datos buscando patrones que aislan las columnas del resto de datos del .txt.
Patrones de aislamiento de columnas:
1) Segunda linea de separacion del listado
2) Caracter separador de columna
3) No se ve en tu imagen, pero necesitamos algo para detectar la linea de totales, para no incluirlos en la excel.
Ademas hay que especificar tipo Caracter a las columnas que pueden contener numeros pero que no son numeros, por ejemplo el codigo de cuenta...
Creo que se puede conseguir: sólo hay que trabajarlo un poco.
Saludos
Si mal no entiendo la única opcion que tienes es generar el excel a partir del fichero .txt; no tienes acceso a los fuentes.
Siendo esto asi, se trataria de purificar los datos buscando patrones que aislan las columnas del resto de datos del .txt.
Patrones de aislamiento de columnas:
1) Segunda linea de separacion del listado
2) Caracter separador de columna
3) No se ve en tu imagen, pero necesitamos algo para detectar la linea de totales, para no incluirlos en la excel.
Ademas hay que especificar tipo Caracter a las columnas que pueden contener numeros pero que no son numeros, por ejemplo el codigo de cuenta...
Creo que se puede conseguir: sólo hay que trabajarlo un poco.
Saludos
Re: Archivo plano de Clipper a Excel
Hola Carlos
Y no podrías hacerlo por el tamaño de _?.
En tu imagen el campo código de la cuenta parece que tiene 21 caracteres, y si te fijas en la fila de los nombres de las columnas, tienes un carácter que hace de límite entre ellos, con eso puedes saber que longitud tiene cada campo, sumarlos para el total de la línea, una variable por campo,o un array, para meter el valor leído y después pasarlo
al excel.
Es una idea
Y no podrías hacerlo por el tamaño de _?.
En tu imagen el campo código de la cuenta parece que tiene 21 caracteres, y si te fijas en la fila de los nombres de las columnas, tienes un carácter que hace de límite entre ellos, con eso puedes saber que longitud tiene cada campo, sumarlos para el total de la línea, una variable por campo,o un array, para meter el valor leído y después pasarlo
al excel.
Es una idea
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Re: Archivo plano de Clipper a Excel
Mauricio, hmpaquito, Pedro, gracias por sus respuestas.
Ya le dí por ahí la vuelta. Como les indicaba son mas de 50 informes que genera el programa original y como no tengo las fuentes no puedo ponerle algún caracter que me marque como separador. Por otro lado, los informes no son homologados. Es decir, en algunos hay un caracter que podría tomar como separador, en otros no hay nada, simplemente el nombre de las columnas. Todos son diferentes. Los hay de diferentes anchos en columnas y formas. Algunos tienen líneas, otros no.
Lo único que se me ocurre es lo siguiente:
1.- Poner en pantalla el informe y para que el usuario lo vea y cuente líneas y caracteres e indique a partir de qué linea comienza el encolumnado, cuántas columnas debe tener y _ para cada columna. Esa información la guardo en una tabla para que la próxima vez que pida ese informe no tenga que volver a hacerlo.
2.- La tabla tendrá el primer campo siempre de una longuitud de 250 caracteres para que entren los textos de los títulos de los informes. Las siguientes columnas, tendrán longitud de acuerdo a lo indicado por el usuario
3.- Luego, con TTxtFile cargo el fichero texto, lo recorro, elimino caracteres que no tengan que ver con texto y número (letra negrilla, salto de página, tamaños de letra, etc), y voy tomando datos de acuerdo a las longitudes indicadas para las columnas, y creo el archivo excel con TExcelScrip.
Un poco engorroso pero no se me ocurre nada más. Qué les parece ?
Si logro hacerlo subo el código por si a alguien más le puede servir.
Saludos, y nuevamente gracias por su ayuda,
Carlos Gallego
Ya le dí por ahí la vuelta. Como les indicaba son mas de 50 informes que genera el programa original y como no tengo las fuentes no puedo ponerle algún caracter que me marque como separador. Por otro lado, los informes no son homologados. Es decir, en algunos hay un caracter que podría tomar como separador, en otros no hay nada, simplemente el nombre de las columnas. Todos son diferentes. Los hay de diferentes anchos en columnas y formas. Algunos tienen líneas, otros no.
Lo único que se me ocurre es lo siguiente:
1.- Poner en pantalla el informe y para que el usuario lo vea y cuente líneas y caracteres e indique a partir de qué linea comienza el encolumnado, cuántas columnas debe tener y _ para cada columna. Esa información la guardo en una tabla para que la próxima vez que pida ese informe no tenga que volver a hacerlo.
2.- La tabla tendrá el primer campo siempre de una longuitud de 250 caracteres para que entren los textos de los títulos de los informes. Las siguientes columnas, tendrán longitud de acuerdo a lo indicado por el usuario
3.- Luego, con TTxtFile cargo el fichero texto, lo recorro, elimino caracteres que no tengan que ver con texto y número (letra negrilla, salto de página, tamaños de letra, etc), y voy tomando datos de acuerdo a las longitudes indicadas para las columnas, y creo el archivo excel con TExcelScrip.
Un poco engorroso pero no se me ocurre nada más. Qué les parece ?
Si logro hacerlo subo el código por si a alguien más le puede servir.
Saludos, y nuevamente gracias por su ayuda,
Carlos Gallego
Saludos,
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Re: Archivo plano de Clipper a Excel
Carlos,
Pues "ya metidos en gastos", es decir, ya que vas a crear una especie de configuracion para exportacion a Excel, lo que se podria hacer seria crear una .dbf con los siguientes campos
Titulo
IniCol1
FinCol1
TipoCol1
....
IniColn
FinColn
TipoColn
Esa .dbf la rellenarias TU, y el usuario no tendria nada mas que seleccionar el .txt que quiere "traducir", y el proceso exportador buscaria el titulo de entre todos los que tiene la .dbf y obtendria su configuracion de exportacion a Excel.
Saludos
Pues "ya metidos en gastos", es decir, ya que vas a crear una especie de configuracion para exportacion a Excel, lo que se podria hacer seria crear una .dbf con los siguientes campos
Titulo
IniCol1
FinCol1
TipoCol1
....
IniColn
FinColn
TipoColn
Esa .dbf la rellenarias TU, y el usuario no tendria nada mas que seleccionar el .txt que quiere "traducir", y el proceso exportador buscaria el titulo de entre todos los que tiene la .dbf y obtendria su configuracion de exportacion a Excel.
Saludos
Re: Archivo plano de Clipper a Excel
hmpaquito,
Exacto, esa es la idea, pero de todas formas lo voy a dejar abierto para que el usuario haga sus ajustes o agregue configuración para otros informes. Yo le entrego unos preconfigurados y él puede crear nuevos.
Saludos,
Carlos Gallego
Exacto, esa es la idea, pero de todas formas lo voy a dejar abierto para que el usuario haga sus ajustes o agregue configuración para otros informes. Yo le entrego unos preconfigurados y él puede crear nuevos.
Saludos,
Carlos Gallego
Saludos,
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Carlos Gallego
*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Re: Archivo plano de Clipper a Excel
saludos .
Code: Select all
cCadena := oTxt:cLine
cSeparador := space( 2 )
aStr := StringToArray( cCadena1, cSeparador )
for i := 1 to len( aStr )
? aStr[i]
next
FUNCTION StringToArray( cString, cSeparator )
LOCAL nPos
LOCAL aString := {}
DEFAULT cSeparator := ";"
cString := ALLTRIM( cString ) + cSeparator
DO WHILE .T.
nPos := AT( cSeparator, cString )
IF nPos = 0
EXIT
ENDIF
AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
cString := SUBSTR( cString, nPos+1 )
ENDDO
RETURN ( aString )
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "