Otros temas que te pueden interesar
|
||||
| Tema | Autor | Foro | Respuestas | Último post |
| [Herramienta] Pasar datos de Cobol (Archivos RMKF) a txt/Excel | JuanPelaez | COBOL - General | 10 | 3 de enero de 2020 12:58 |
| [Herramienta] Herramienta para pasar datos de RM85- RMKF a texto | cfdiaz | COBOL - General | 6 | 15 de mayo de 2019 22:32 |
| [Sintaxis] Pasar CSV a texto plano | theezraak | RM/COBOL | 8 | 24 de octubre de 2016 11:01 |
| [Sintaxis] Pasar número a fichero Texto Plano | Josber | PowerCOBOL (ActiveX, v4 - v11) | 3 | 3 de junio de 2015 11:09 |
| [Sintaxis] Pasar datos entre pantallas | Breew | PowerCOBOL (ActiveX, v4 - v11) | 8 | 12 de mayo de 2015 18:31 |
![]() |
|
Forero Junior
![]()
|
Buenas a todos, tengo una gran duda que no encuentro información precisa en la red y es la siguiente. ¿Se puede pasar los datos de Cobol a texto plano?, es decir a un txt. Hago esta pregunta, por que necesito sacar esa información de un sistema echo en Cobol y pasarlo a una nueva base de datos.
Escribo esta inquietud por que soy nuevo en este mundo de Cobol, y tengo nociones básicas del mismo.Desde ya muchas gracias, Saludos. |
||||||||
|
|
|
|
Moderador Global
![]()
|
Claro que puedes, sin problemas, el fichero lo tienes que definir como LINE SEQUENTIAL, lees los registros de uno y, montando la cadena con un STRING, los grabas en el otro, sólo has de tener en cuenta en los campos numéricos lo siguiente:
- No pueden ser de tipo COMP, BINARY o HEXADECIMAL, si alguno es de éste tipo, has de moverlo antes a un tipo editado. (con formato PIC Z.ZZZ) - Los números con formato DISPLAY, (los normales del tipo PIC 9(5)V(99), por ejemplo), has de moverlos antes a un tipo EDITADO, por ejemplo PIC Z.ZZ9,99, o de lo contrario, te aparecerá en el último dígito una letra de la A a la F. - Cuando un número sea 0 (cero), y no quieras que te aparezca nada, ni siquera el 0, usa la cláusula BLANK WHEN ZERO. Si tienes alguna problema, o quieres algún ejemplo, no dudes en consultar de nuevo. Un saludo y suerte.- |
||||||||
|
|
|
|
Forero Junior
![]()
|
Muchas Gracias Josber por tu gran respuesta, gracias por esos consejos.
Pero me encantaría, si no es problema, un ejemplo para ver si estoy en buen camino con lo que estoy pensando y haciendo. Ya que en esto de cobol son muy novato, para hacerte sincero. Desde ya muchas gracias nuevamente, Saludos. |
||||||||
|
|
|
|
Moderador Global
![]()
|
Aquí, tienes un sencillo ejemplo, lo he escrito directamente, así es que puede que tenga errores y no compile bien, pero aunque sintácticamente no funcione, la lógica de programación es correcta.
Código COBOL:
Si hay algo que no entiendas, no dudes en preguntar. Un saludo.- |
||||||||
|
|
|
|
Moderador Global
![]()
|
Matias, Te he borrado el último post porque estaba duplicado, procura no duplicar los post, por favor, no te he contestado antes porque he tenido el ordenador estropeado unos días.
A ver, el código es muy sencillo, te explico: El apartado INICIO: Aquí abro el fichero de origen en modo lectura, y el fichero de destino en modo escritura, puesto que uno sólo lo voy a leer y el otro, sólo lo voy a grabar (escribir). El apartado POSICIONAR: Como el fichero de origen, vamos a leerlo desde principio a fin, necesitamos posicionarnos en el primer registro que haya, por eso movemos 0 a NUMERO, ya que no habrá un registro más bajo que ese. (El mover 0 a CONTA, es para "inicializar" el contador de registros pasados, para saber el número de registros que hemos traspasado). Como segundo paso, nos posicionamos en el fichero de origen (instrucción START) y le decimos que no sea menor del valor de NUMERO, (KEY NOT LESS NUMERO), que en este caso es 0 (cero), y que si hay un error (INVALID KEY), nos muestre un mensaje diciendo "*Error, el fichero está vacío ..." y que cierre el programa (INVOKE POW-SELF "CloseForm" EXIT PROGRAM) El apartado LEER: Una vez posicionados en el fichero, tenemos que "crear" un bucle que lo lea de principio a fin, eso es lo que hacemos en esta parte. Leemos el fichero y lo "preparamos" para leer el siguiente registro, (READ ORIGEN NEXT RECORD), y comprobamos si hemos llegado al final del fichero (AT END), si es así, lo "mandamos" al apartado FIN-LEER, (GO FIN-LEER), si no es así, lo enviamos a MONTAR-LINEA, que es donde generamos el fichero de texto que quieres, la diferencia entre GO y PERFORM, explicado así a lo bruto, es que GO, te envía a un sitio y alli te quedas, y PERFORM, te envía a un sitio, pero cuando termina, vuelves al punto de origen, en éste caso se termina en FIN-MONTAR. Después de MONTAR-LINEA y, como te he dicho anteriormente, al ser un bucle para leer todo el fichero, volvemos al apartado LEER, (así estaremos hasta que se cumpla la condición AT END, fin-de-fichero). El apartado FIN-LEER: Cuando hemos terminado de leer y traspasar todo el fichero, sólo nos queda informar al usuario del número total de registros que se han pasado, como el número queremos mostrarlo en modo "bonito", con su separador de millares, movemos el contador de registros a un editado, (MOVE CONTA TO CINCO-EDI). El siguiente paso es montar el texto de información, (STRING "Fin del traspaso. Se han pasado " CINCO-EDI " Registros." DELIMITED BY SIZE INTO LINEA END-STRING) y mostrar una ventana informativa con el texto, (INVOKE POW-SELF "DisplayMessage" USING LINEA ...), y por último, cerramos los ficheros abiertos, (CLOSE ORIGEN DESTINO) y cerramos el programa (INVOKE POW-SELF "CloseForm".). El apartado MONTAR-LINEA: En esta parte es donde montamos la linea de texto con todos los datos de la ficha del cliente, hay que tener en cuenta que, cuando pasamos datos numéricos, sean del tamaño que sean, a texto plano, el último número no lo pondrá en HEXADECIMAL, por lo que antes de pasarlo, lo movemos a un "editado" para evitar esto. (MOVE NUMERO TO CINCO-EDI.), y, para que no nos meta "basura", lo primero es "inicializar" las variables que vamos a utilizar. (MOVE 0 TO CINCO-EDI NUEVE-EDI P MOVE SPACES TO LINEA.) El como se monta la linea, ya está explicado en el propio código. Una vez montada la LINEA con el texto, sólo nos queda grabarla en el fichero de destino. (WRITE DESTINO). Por último, añadimos 1 al contador de registros grabados. (ADD 1 TO CONTA) El apartado FIN-MONTAR: Aquí es donde le indicamos al PERFORM que hicimos antes, que se ha acabado el código y que vuelva (EXIT.). Con ésto está todo explicado, si aún tienes alguna duda, pregunta sin problemas. Un saludo.- |
||||||||
|
|
|
|
Forero Junior
![]()
|
Hola Josber, gracias por tu respuesta. Desde ya me disculpo por el tema del duplicado pero es que se me paso jeje.
Y ahora me pongo a chequear lo que me explicaste porque ando un poco atareado de trabajo, pero te agradezco de corazón el tiempo que dedicas a contestar mis dudas, enserio. Muchas gracias. Y seguro que algo a futuro te voy a volver a preguntar, jeje. Saludos, y nuevamente muchas gracias. |
||||||||
|
|
|
![]() |
| Herramientas | |
|
|
| Archivo - Cobol Foro | Contactar con Nosotros - Cobol Foro | |||||||