Archivo de texto

De nuevo yo. Trabajo en un colegio y mensualmente debo enviar al gobierno un archivo de texto que contiene los datos de los alumnos y otras novedades. Ellos te dan el formato que debes respetar a rajatablas. Intenté con un REPOR FORM novedad TO FILE novedad.txt ASCII pero no me da el ancho. Por ej el ultimo campo de cada registro debe estar la posición 120 y el ancho del reporte me da solamente hasta 85. Probé cambiando el tamaño de hoja pero no consigo ensancharlo. ¿Tiens alguna idea de como hacerlo?

1 respuesta

Respuesta
1
Como va todo por ahí, espero que bien.
Pasemos a tu problema, si lo que necesitas es pasar datos que creo que en tu caso los tienes en un informe a un archivo plano txt, lo que podrías hacer es seguir estos pasos:
1) Crea una consulta con los campos que tienes que incluir en el informe, por ejemplo:
SELECT campo1, campo2, campo3 FROM mitabla WHERE campo1 = 999 INTO CURSOR micursor ORDER BY campo1
2) Seleccionas el cursor que se creo en el paso 1.
SE LE micursor
3) Copias los registros del cursor a un archivo de texto (txt)
COPY TO "C:\micarpeta\nombredelarchivo" DELIMITED
Si después del comando DELIMITED no escribís nada, por defecto el comando usará como delimitador de cada campo la coma "," por el contrario si usas DELIMITED WITH BLANK cada campo será separado por un espacio en blanco, si escribes DELIMITED WITH TAB cada campo será delimitado por una tabulación y si escribes DELIMITED WITH CHARACTER 'micaracterdelimitador' entonces cada campo será separado por el carácter que escribiste.
Bueno eso es todo, espero que te sirva la ayuda.
Ahhh y me olvidaba, ese Messi es un genio, soy fana del Barcelona hace mucho y la verdad que es un placer verlo jugar a Messi con tantas figuras.
Tu aporte también me es útil, pero necesito otra cosa.
El formato de registro es parecido al que sigue:
Campo: "fecha" va desde posición 1 hasta 8, longitud 8
campo "nombre" va desde 9 hasta 39, longitud 30
campo "importe" va desde 40 hasta 50 (es numérico 10 con dos decimales-los lugares previos se completan con 0
etc, etc, hasta el ultimo campo que termina en la posición 150
¿Me entiendes? Cuando lo hago con reporte el ancho no me alcanza.
HELP
Espero que con esta respuesta puedas solucionar tu problema. Te cuento que este código que te paso lo hice en un prg, lo que tendrías que hacer es crea un nuevo prg y copiar el código, ademas tienes que crear una tabla que contenga solo 1 campo de tipo carácter de longitud 150. Este es el código:
Se le prueba
Go top
DO WHILE !EOF()
FEC = SUBSTR(DTOC(FECHA),1,2) + SUBSTR(DTOC(FECHA),4,2) + SUBSTR(DTOC(FECHA),7,4)
NOM = ALLTRIM(NOMBRE)
IF (30 - LEN(NOM)) > 0
ESPACIOS = 30 - LEN(NOM)
NOM = NOM + REPLICATE(' ',ESPACIOS)
ENDIF
IMP = ALLTRIM(STR(IMPORTE,10,2))
IF (10 - LEN(IMP)) > 0
CEROS = 10 - LEN(IMP)
IMP = REPLICATE('0',CEROS) + IMP
ENDIF
REPLACE CADENA WITH FEC + NOM + IMP
Se le prueba
SKIP
Enddo
SELE CADENA FROM PRUEBA INTO CURSOR MICURSOR
Se le micursor
Copy to c:\archivodetexto delimited
En este ejemplo la tabla que he creado se llama PRUEBA, en ella también cree los campos que me decías que necesitabas y como ultimo campo CADENA (carácter de 150). Lo que hago es recorrer la tabla y voy convirtiendo cada uno de los campos para que queden todos como carácter, a la fecha la paso a carácter y le elimino las barras, al campo nombre le agrego espacios en blanco si es necesario para completar los 30 caracteres y importe lo transformo a carácter y agrego 0 a la izquierda en el caso de ser necesario para completar los 10 caracteres.
Eso es todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas