Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Facil - cambiar exportador de excel a txt


KalEl
29 de septiembre de 2017, 22:22
Gente que tal,

Tengo este código que convierte un archivo rmkf .dat en Excel, pero desearía que sea a TXT o CSV para evitar problemas de versiones.

No se programar en cobol, pero si sé en PHP, VB, JS, etc.

PROCEDURE DIVISION.
DECLARATIVES.
#INCLUDE "19.DEC".
#INCLUDE "38.DEC".
END DECLARATIVES.
* Abre Excel y graba títulos
* MOVE "\XXX\AR19.DAT" TO AR19.
* INVOKE POW-SELF "CallForm" USING "Excel" "RUTINAS"
* IF V-RUT NOT = "S" EXIT PROGRAM.
* IF V-EXEL = 1 MOVE POW-TRUE TO "ShowExcel" OF EXCEL.
MOVE 11 to "MousePointer" OF POW-SELF
MOVE " Generando planilla en Excel " TO "StatusText" OF POW-SELF.
1.
INVOKE EXCEL "Start"
INVOKE EXCEL "NewBook" USING 1
MOVE "Cuenta " TO "Text"(1 1) OF EXCEL
MOVE "Nombre " TO "Text"(1 2) OF EXCEL
MOVE "Domicilio " TO "Text"(1 3) OF EXCEL
MOVE "Localidad " TO "Text"(1 4) OF EXCEL
MOVE "Provincia " TO "Text"(1 5) OF EXCEL
MOVE "Cuit " TO "Text"(1 6) OF EXCEL
MOVE "Iva " TO "Text"(1 7) OF EXCEL
MOVE "Vendedor " TO "Text"(1 8) OF EXCEL
MOVE "Cobrador " TO "Text"(1 9) OF EXCEL
MOVE "Zona " TO "Text"(1 10) OF EXCEL
MOVE "Mercado " TO "Text"(1 11) OF EXCEL
MOVE 1 TO IL
OPEN INPUT CLIE
INITIALIZE R19 SFA
START CLIE KEY NOT < CO19 INVALID MOVE 1 TO SFA
NOT INVALID READ CLIE NEXT NO LOCK.
PERFORM UNTIL SFA = 1
PERFORM PASO1
READ CLIE NEXT NO LOCK AT END MOVE 1 TO SFA END-READ
END-PERFORM
CLOSE CLIE
* INVOKE POW-SELF "DISPLAYMESSAGE" USING "PASO 1"
INVOKE EXCEL "SaveAsBook" USING "C:\DATA\CLIENT.XLS" POW-FALSE RETURNING ReturnValue.
* INVOKE POW-SELF "DISPLAYMESSAGE" USING "PASO 2"
INVOKE EXCEL "CloseBook" USING 1.

se que faltan otras partes del código, pero quisiera saber si con un simple cambio del código puedo exportarlo a txt en lugar de XLS.

Kuk
2 de octubre de 2017, 13:35
KalEl, publica los SELECT y FD también.
Entiendo que este programa no lo vas a ejecutar en un script, sino que se trata de uno con Forms (PowerCOBOL)

KalEl
2 de octubre de 2017, 14:17
Hola Kuk, ahi te paso los archivos.

Saludos

Kuk
2 de octubre de 2017, 14:30
KalEl, has colgado descripción de 2 ficheros. ¿Para cual necesitas eso, para los dos?

KalEl
2 de octubre de 2017, 23:29
KalEl, has colgado descripción de 2 ficheros. ¿Para cual necesitas eso, para los dos?

No, solo del 19.
Colgue el 38 porque vi que al principio del código lo leia pero no debe ser necesario.

Kuk
3 de octubre de 2017, 14:18
KalEl, dame el código del párrafo PASO1.

KalEl
3 de octubre de 2017, 21:19
Kuk, aqui va el código del paso1:

PASO1.
ADD 1 TO IL
MOVE CO19 TO TEX MOVE TEX TO "Text"(IL 1) OF EXCEL
MOVE NOM19 TO "Text"(IL 2) OF EXCEL
MOVE DOM19 TO "Text"(IL 3) OF EXCEL
MOVE COP19 TO "Text"(IL 4) OF EXCEL
MOVE PRO19 TO "Text"(IL 5) OF EXCEL
MOVE CUI19 TO "Text"(IL 6) OF EXCEL
EVALUATE TIV19
WHEN 1 MOVE "RI" TO TEX
WHEN 2 MOVE "RN" TO TEX
WHEN 3 MOVE "NR" TO TEX
WHEN 4 MOVE "EX" TO TEX
WHEN 5 MOVE "CF" TO TEX
WHEN 6 MOVE "RM" TO TEX
WHEN 7 MOVE "NC" TO TEX
WHEN OTHER MOVE " " TO TEX
END-EVALUATE
MOVE TEX TO "Text"(IL 7) OF EXCEL
MOVE VEN19 TO "Text"(IL 8) OF EXCEL
MOVE COB19 TO "Text"(IL 9) OF EXCEL
MOVE ZON19 TO "Text"(IL 10) OF EXCEL
MOVE MER19 TO "Text"(IL 11) OF EXCEL.

Kuk
4 de octubre de 2017, 09:58
KalEl,


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

COPY "AR19.SEL".

SELECT CSV-FILE
ASSIGN TO "AR19.csv"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS ST1.

DATA DIVISION.
FILE SECTION.
COPY "AR19.FD".

FD CSV-FILE.
01 RE-CSV.
05 RE-CO19 PIC X(7).
05 FILLER PIC X(1).
05 RE-NOM19 PIC X(40).
05 FILLER PIC X(1).
05 RE-DOM19 PIC X(30).
05 FILLER PIC X(1).
05 RE-COP19 PIC 9(4).
05 FILLER PIC X(1).
05 RE-PRO19 PIC 99.
05 FILLER PIC X(1).
05 RE-CUI19 PIC X(13).
05 FILLER PIC X(1).
05 RE-TIV19-X PIC X(2).
05 FILLER PIC X(1).
05 RE-VEN19 PIC 999.
05 FILLER PIC X(1).
05 RE-COB19 PIC 999.
05 FILLER PIC X(1).
05 RE-ZON19 PIC 99.
05 FILLER PIC X(1).
05 RE-MER19 PIC 9.

WORKING-STORAGE SECTION.
01 ST1 PIC X(2).
88 ST1-OK VALUE '00' '02' '05'.
88 ST1-EOF VALUE '10'.

01 TEX PIC X(10).
01 EDT PIC -(6)9.

LINKAGE SECTION.
01 CMD-LINE.
05 CMD-LENGTH PIC S9(4) COMP-5.
05 CMD-CONTENT PIC X(100).
PROCEDURE DIVISION USING CMD-LINE.

DECLARATIVES.
#INCLUDE "19.DEC".
END DECLARATIVES.

PERFORM ABRIR-FICHEROS
PERFORM GRABA-CABECERA

START CLIE FIRST

IF ST-OK
READ CLIE NEXT

PERFORM UNTIL ST1-EOF
MOVE CO19 TO EDT

EVALUATE TIV19
WHEN 1 MOVE "RI" TO TEX
WHEN 2 MOVE "RN" TO TEX
WHEN 3 MOVE "NR" TO TEX
WHEN 4 MOVE "EX" TO TEX
WHEN 5 MOVE "CF" TO TEX
WHEN 6 MOVE "RM" TO TEX
WHEN 7 MOVE "NC" TO TEX
WHEN OTHER MOVE " " TO TEX
END-EVALUATE

STRING EDT ";"
NOM19 ";"
DOM19 ";"
COP19 ";"
PRO19 ";"
CUI19 ";"
TEX ";"
VEN19 ";"
COB19 ";"
ZON19 ";"
MER19 ";"
DELIMITED BY SIZE INTO RE-CSV

WRITE RE-CSV

IF NOT ST1-OK
INVOKE POW-SELF "DisplayMessage"
USING "Error WRITE CSV", ST1, 16

GOBACK
END-IF

READ CLIE NEXT
END-PERFORM
END-IF

CLOSE CLIE, CSV-FILE

GOBACK
.

ABRIR-FICHEROS.

OPEN INPUT CLIE

IF NOT ST1-OK
INVOKE POW-SELF "DisplayMessage"
USING "Error OPEN AR86", ST1, 16

GOBACK
END-IF

OPEN OUTPUT CSV-FILE

IF NOT ST1-OK
INVOKE POW-SELF "DisplayMessage"
USING "Error OPEN CSV", ST1, 16

GOBACK
END-IF
.

GRABA-CABECERA.

MOVE "Cuenta ;" &
"Nombre ;" &
"Domicilio ;" &
"Localidad ;" &
"Provincia ;" &
"Cuit ;" &
"Iva ;" &
"Vendedor ;" &
"Cobrador ;" &
"Zona ;" &
"Mercado ;" TO RE-CSV

WRITE RE-CSV

IF NOT ST-OK
INVOKE POW-SELF "DisplayMessage"
USING "Error WRTIE CSV", ST1, 16

GOBACK
END-IF
.

Fito
4 de octubre de 2017, 17:53
Hola KUK:

Estoy viendo mal o el string y el move de la cabecera, son más grandes que el RE-CSV?

Saludos.

Fito...

Kuk
4 de octubre de 2017, 19:25
Fito, he creado la estructura copiando los campos uno a uno añadiendo los FILLER, pero no lo he probado, así que es posible que se me haya escapado algo.

KalEl
10 de octubre de 2017, 21:13
Copie todo el código en el "EVENT PROCEDURES" OPENED.

y al compilarlo me da el siguiente error.

MainForm MainForm-Opened(1) : JMN1019I-W The indicator area must contain '-', '*', '/', 'D', or blank. A blank is assumed to be specified.
MainForm MainForm-Opened(1) : JMN1005I-W Character string 'NVIRONMENT' must start in Area B. The character string is assumed to start in Area B.
MainForm MainForm-Opened(1) : JMN1356I-W The invalid word 'NVIRONMENT' is specified in the IDENTIFICATION DIVISION. The invalid word is ignored, and the compiler skips to the next paragraph or DIVISION.
AR19.FD 1: JMN2005I-S The file-name for the file description entry or the sort-merge file description entry must be defined at the SELECT clause of the FILE-CONTROL paragraph. A sequential file is assumed.
MainForm MainForm-Opened(16) : JMN2005I-S The file-name for the file description entry or the sort-merge file description entry must be defined at the SELECT clause of the FILE-CONTROL paragraph. A sequential file is assumed.
MainForm MainForm-Opened(55) : JMN2503I-S User word 'ST-S' is undefined.
MainForm MainForm-Opened(55) : JMN2557I-S The format of the MOVE statement is incomplete.
MainForm MainForm-Opened(55) : JMN2503I-S User word 'AR19' is undefined.
MainForm MainForm-Opened(55) : JMN2503I-S User word 'ST-S' is undefined.
MainForm MainForm-Opened(55) : JMN2600I-S The operand of the condition is invalid.
MainForm MainForm-Opened(55) : JMN2557I-S The format of the IF statement is incomplete.
MainForm MainForm-Opened(61) : JMN3166I-S Sequential access sequential file 'CLIE' cannot be specified in a START statement.
MainForm MainForm-Opened(63) : JMN2503I-S User word 'ST-OK' is undefined.
MainForm MainForm-Opened(63) : JMN2600I-S The operand of the condition is invalid.
MainForm MainForm-Opened(63) : JMN2557I-S The format of the IF statement is incomplete.
MainForm MainForm-Opened(104) : JMN2510I-S 'END-IF' does not correspond. 'END-IF' is ignored.
MainForm MainForm-Opened(144) : JMN1479I-S The concatenation expression is too long. A literal is created using the first parts of the expression so that it does not exceed the maximum length.
MainForm MainForm-Opened(148) : JMN2503I-S User word 'ST-OK' is undefined.
MainForm MainForm-Opened(148) : JMN2600I-S The operand of the condition is invalid.
MainForm MainForm-Opened(148) : JMN2557I-S The format of the IF statement is incomplete.
MainForm MainForm-Opened(153) : JMN2510I-S 'END-IF' does not correspond. 'END-IF' is ignored.

Kuk
11 de octubre de 2017, 10:46
KalEl, has copiado/pegado mal el código. Si usas el editor de PowerCOBOL, el código debe comenzar en la columna 2, que es lo que hace el código que te he pasado.

KalEl
11 de octubre de 2017, 22:32
Kuk..

acá un amigo me opaso una solucion a este post:

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
#INCLUDE "EXTERIOR.CPY".
77 I PIC 999.
77 N PIC S9(10)V99.
77 FI8 PIC 9(8).
77 FF8 PIC 99/99/9999.
01 ARTI-PE. *> copia de CARGAP con 1 solo renglon
03 LIB-PE PIC 9. *> 1=Articulo libre
03 LRA-PE. *> Codigo articulo
04 LIN-PE PIC X(6). *> Linea
04 RUB-PE PIC X(6). *> Rubro
04 ART-PE PIC X(18). *> Articulo
03 CAN-PE PIC S9(8)V9(4). *> Cantidad pedida
03 CEN-PE PIC S9(8)V9(4). *> Cantidad entregada
03 DES-PE PIC X(40). *> Descripcion
03 DEA-PE PIC X(40). *> Descripcion Adicional
03 CUN-PE PIC 9(6)V99. *> Cantidad de Unidades
03 MUN-PE PIC X(10). *> Medida de la Unidad
03 RIB-PE PIC 99. *> Rubro Ing.Brutos
03 CTA-PE PIC 9(4). *> Imp.Contable
03 UNI-PE PIC S9(8)V9(4). *> Valor Unitario
03 IMI-PE PIC S9(7)V9(4). *> Imp.Internos
03 ALI-PE PIC 99V99. *> Alicuota de Iva
03 DE1-PE PIC S999V99. *> % Rc/Dto 1
03 DE2-PE PIC S99V99. *> % Rc/Dto 1
03 IMP-PE PIC S9(8)V99. *> Importe
03 FEE-PE PIC 9(8). *> Fecha de Entrega
03 OBS-PE PIC X(40). *> Observaciones
03 SUB-PE PIC X(60). *> Subdivision

01 CARGA.
02 ARTI00.
03 LIB00 PIC 9. *> 1=Articulo libre
03 LRA00.
04 LIN00 PIC X(6).
04 RUB00 PIC X(6).
04 ART00 PIC X(18).
03 CAN00 PIC S9(8)V9(4).
03 DES00 PIC X(40).
03 DEA00 PIC X(40).
03 CUN00 PIC 9(6)V99.
03 MUN00 PIC X(10).
03 RIB00 PIC 99.
03 CTA00 PIC 9(4).
03 UNI00 PIC S9(8)V9(4).
03 IMI00 PIC S9(7)V9(4).
03 ALI00 PIC 99V99.
03 DE100 PIC S999V99.
03 DE200 PIC S99V99.
03 IMP00 PIC S9(8)V99.
03 SUB00 PIC X(60).
PROCEDURE DIVISION.
DECLARATIVES.
#INCLUDE "AR19.DEC".
#INCLUDE "AR38.DEC".
END DECLARATIVES.
MOVE 11 to "MousePointer" OF POW-SELF.
1.
MOVE "CLIENTES.TXT" TO ARXXX OPEN OUTPUT RATIOS
MOVE "Cuenta " TO XXX99(1)
MOVE "Nombre " TO XXX99(2)
MOVE "Domicilio " TO XXX99(3)
MOVE "Localidad " TO XXX99(4)
MOVE "Provincia " TO XXX99(5)
MOVE "Cuit " TO XXX99(6)
MOVE "Iva " TO XXX99(7)
MOVE "Vendedor " TO XXX99(8)
MOVE "Cobrador " TO XXX99(9)
MOVE "Zona " TO XXX99(10)
MOVE "Mercado " TO XXX99(11)
WRITE RXX

OPEN INPUT CLIE
INITIALIZE R19 SFA
START CLIE KEY NOT < CO19 INVALID MOVE 1 TO SFA
NOT INVALID READ CLIE NEXT NO LOCK.
PERFORM UNTIL SFA = 1
PERFORM PASO1 THRU FPASO1
READ CLIE NEXT NO LOCK AT END MOVE 1 TO SFA END-READ
END-PERFORM.
CLOSE CLIE RATIOS.
MOVE 0 TO I IF I = 0 GO FIN.

FIN.
MOVE " " TO "StatusText" OF POW-SELF
MOVE 1 TO "MousePointer" OF POW-SELF
INVOKE POW-SELF "Deactivate"
EXIT PROGRAM.
* Paso un comprobante
PASO1.
MOVE CO19 TO XXX99(1)
MOVE NOM19 TO XXX99(2)
MOVE DOM19 TO XXX99(3)
MOVE COP19 TO XXX99(4)
MOVE PRO19 TO XXX99(5)
MOVE CUI19 TO XXX99(6)
EVALUATE TIV19
WHEN 1 MOVE "RI" TO TEX
WHEN 2 MOVE "RN" TO TEX
WHEN 3 MOVE "NR" TO TEX
WHEN 4 MOVE "EX" TO TEX
WHEN 5 MOVE "CF" TO TEX
WHEN 6 MOVE "RM" TO TEX
WHEN 7 MOVE "NC" TO TEX
WHEN OTHER MOVE " " TO TEX
END-EVALUATE.
MOVE TEX TO XXX99(7)
MOVE VEN19 TO XXX99(8)
MOVE COB19 TO XXX99(9)
MOVE ZON19 TO XXX99(10)
MOVE MER19 TO XXX99(11)
WRITE RXX.
FPASO1.

Se compila bien, pero me da error en la línea "OPEN INPUT CLIE "

pero no explica nada de porque el error.. tendrás alguna idea?

Josber
12 de octubre de 2017, 20:35
¿Dónde están las declaraciones de los archivos en la ENVIRONMENT y DATA DIVISION?

Un saludo.-