FoxPro/Visual FoxPro - ARCHIVO PLANO LARGO

   
Vista:

ARCHIVO PLANO LARGO

Publicado por GERMAN (4 intervenciones) el 12/05/2014 17:04:09
Hola, quisiera saber si alguien puede ayudarme.
Necesito escribir una cadena en un archivo plano de 1405 caracteres y el archivo se me trunca en 1022 y automáticamente me coloca el resto de la cadena en el renglón siguiente.
El proceso lo hago utilizando las funciones FCREATE, FWRITE,ETC.

Muchas Gracias Agradezco la ayuda lo mas pronta posible
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ARCHIVO PLANO LARGO

Publicado por Fidel José (558 intervenciones) el 13/05/2014 00:51:36
Si escribes con fwrite(lnhand, lcCAdena) (sin poner la cantidad de caracteres) tendría que escribir todo el texto. Igual con fputs().
La diferencia entre fwrite y fputs es que fPuts agrega un retorno de carro y avance de línea al texto (chr(13)+chr(10).

Lo que tienes que revisar es que el texto que envías no contenga uno de esos dos caracteres, porque producirá el efecto que describes. Eso es frecuente cuando el texto está almacenado en un campo memo.
Puedes intentar con:
=fputs(lnHandler , Chrtran(lcCadena, Chr(10)+chr(13), "" ) )
Igualmente, si tienes un caracter Chr(9) se cuenta como 1, pero producirá una tabulación en el texto visualizado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por GERMAN (4 intervenciones) el 20/05/2014 21:12:27
Jose, agradezco tu respuesta, pero eso ya lo probé, intente con fputs y fwrite.
El tema por si no fui caro, es que tengo que exportar en un archivo TXT una cadena de caracteres que tiene 1405 de largo ( LEN(cadena) = 1405 ). Tomar el valor de esa cadena y escribirlo en el archivo previamente abierto con FCREATE, utilizando cualquiera de las opciones descriptas debajo, al revisar el archivo una vez finalizada toda la grabación, la cual incluye en promedio 200 registros de 1405 caracteres cada una, aparece trunca en el carácter 1022, y el resto pasa a un segundo renglón, lo cual hace que cuando quiera importar ese archivo TXT generado a través de un aplicativo me de error.

Espero haber sido mas claro.

PD: adjunto archivo resultanta para verificar problema

Ejemplos:
archivo = FCREATE("comprobantes.txt")
cadena= 1700002000038950000000000000000000000000000000000000000000012221920140501AS8000000000020707586085ACOPLADOS XXXXXXX S.A. 0000000000000000000000000000000000000000000000215901SS8000000000030707586083ACOPLADOS RURALES S.A. 01SS8000000000020707586085ACOPLADOS XXXXXXX S.A. SJ. B. Alberdi 331 1506XXXXXX 12SJ. B. Alberdi 331 1506XXXXXX 12SJ. B. Alberdi 331 1506XXXXXX 12 120140301201403312014051320140527Industria 0000000000220002N0000000000081030000000000148060000000000000000000000000000000000000000022909000000000000618550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058500000000000315850000000000031985000000000000955800000000000000000000000000000000000000000000000000000000000061850000000000001900000000000000000000000000000315850000000000031985

FWRITE(archivo,cadena)
FPUTS(archivo,cadena)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por Marco Mendinueta Elmazo_@hotmail.com (8 intervenciones) el 20/05/2014 21:36:21
Has los siguiente.
Asignale el valor a la varible que deseas grabar de la siguiente manera:

Text To cadena Noshow Additive
1700002000038950000000000000000000000000000000000000000000012221920140501AS8000000000020707586085ACOPLADOS XXXXXXX S.A. 0000000000000000000000000000000000000000000000215901SS8000000000030707586083ACOPLADOS RURALES S.A. 01SS8000000000020707586085ACOPLADOS XXXXXXX S.A. SJ. B. Alberdi 331 1506XXXXXX 12SJ. B. Alberdi 331 1506XXXXXX 12SJ. B. Alberdi 331 1506XXXXXX 12 120140301201403312014051320140527Industria 0000000000220002N000000000008103000000000014806000000000000000000000000000000000000000002290900000000000061855
Endtext

Luego crea el archivo de la siguiente manera:

1
2
3
4
5
6
7
8
STORE FCREATE("C:\Ruta de archivo"+NomArchivo+'.txt') TO Puntero 
IF Puntero <0
	=MESSAGEBOX("NO se pudo crear el archivo "+NomArchivo)
	=FCLOSE(Puntero)
ELSE
	=FWRITE(Puntero,cadena)
	=FCLOSE(Puntero)
ENDIF

Y listo, esto te debe funcionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por GERMAN (4 intervenciones) el 20/05/2014 22:59:57
Marco, en principio gracias por tu respuesta.
No se si viste el archivo que adjunte, esa cadena que muestro en el mensaje mío, es una cadena, pero normalmente son 200 cadenas aproximadamente que van dentro del mismo archivo.

Para ser mas claro, son 200 comprobantes mensuales que tengo que exportar a un archivo plano, las cuales debo importar desde un aplicativo que lee cada registro de un largo de 1405 caracteres. Cada renglón o registro de 1405 caracteres es un comprobante.
Osea que para lograr el proceso primero creo el archivo. luego voy iterando y escribiendo cada comprobante:

Ejemplo:
1
2
3
4
5
6
puntero = FCREATE("facturacion.txt")
scan  // recorro la tabla de comprobantes //
      cadena = {campos de la tabla que arma una cadena de 1405 caracteres}
      FPUTS(puntero, cadena)
endscan
FCLOSE(puntero).

Una vez mas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por GERMAN (4 intervenciones) el 21/05/2014 00:14:38
Marco, hice la prueba de lo que me indicaste, pero hace lo mismo que mediante la otra forma los registros (renglones) son cortados a los 1022 caracteres como si le metiera un saldo de line y retorno de carro.

Gracias igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por Fidel José (558 intervenciones) el 21/05/2014 02:09:21
German
Por si te llega a servir, te comento que puedes utilizar FileSystemObject.
En este ejemplo se clona una archivo de texto en otro. Fijate que si ponés las definiciones de objeto en la ventana de comandos, podés ver las propiedades que tiene cada objeto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LOCAL lcFile,lcNewFile,ots,fso,obs
lcFile=GETFILE("txt")
IF EMPTY(lcFile)
	RETURN
ENDIF
 
lcNewFile=ADDBS(JUSTPATH(lcfile))+JUSTSTEM(lcfile)+"_dup.txt"
 
FSO = CreateObject("Scripting.FileSystemObject")
oTS = FSO.OpenTextFile('&lcFile')
obs = fso.CreateTExtFile('&lcNewFile')
 
DO WHILE NOT oTS.AtEndOfStream
    lcGet = oTS.ReadLine()
    obs.WriteLine(lcGet)
 
ENDDO
oTS.Close()
obs.Close()
STORE null TO ots,obs,fso
 
o = CREATEOBJECT("Shell.Application")
o.ShellExecute("notepad.exe", '&LcNewFile', "", "open", 1)	
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por Fernando Gutierrez hfgutierreza@hotmail.com (2 intervenciones) el 06/02/2015 22:31:41
Mi problema es que cuando utilizo el FCREATE() en el fuente funciona OK, cuando genero el ejectutable y lo pongo en la carpeta del sistema sale error, cuando el ejecutable lo ejecuto dentro de la carpeta de los fuentes no sale error, hay alguna librería en especial que se copia donde va el ejecutable
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARCHIVO PLANO LARGO

Publicado por Fidel José (558 intervenciones) el 06/02/2015 23:05:27
No necesitas agregar nada. No sé cuál es el error que te da. Tal vez tengas abierto el archivo que intentas crear.

lcRoot=Fullpath("") && o Carpeta en la que se genera el archivo.
lcTextFile=addbs(lcRoot)+"nombre_Archivo.txt"

lnHand=FCREATE(lcTextFile)
if lnHand # -1
=FPUTS( lnHand , "Escribo esto en el archivo")
=FCLOSE(lnHand) && no olvidar cerrar el archivo de texto
else
Messagebox("No se pudo crear "+lcFileText)
endif
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar