darkcap

16 Mensajes
OFF-Line
| Enviado el 28-07-2010 :: 18:52  
LLevo unos dias dandome de hostias contra un codigo que no me termina de funcionar se que debe ser alguna gilipollez pero es que no hay manera el codigo es el siguiente
IDENTIFICATION DIVISION.
PROGRAM-ID. .
AUTHOR.
REMARKS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* DECLARACION DE ARCHIVO RELATIVO
SELECT A-ARTICULO ASSIGN TO DISK 'FPRODU.REL'
ORGANIZATION RELATIVE
ACCESS DYNAMIC
RELATIVE KEY DIR-RELATIVA.
DATA DIVISION.
FILE SECTION.
* DESCRIPCION DE REGISTRO DEL ARCHIVO RELATIVO DE ARTICULOS
FD A-ARTICULO
LABEL RECORD STANDARD.
01 R-ARTICULO.
02 COD-ARTI PIC 9(2).
02 NOM-ARTI PIC X(20).
02 CAN-ARTI PIC 9(7).
WORKING-STORAGE SECTION.
77 FIN-ARTICULO PIC X.
77 DIR-RELATIVA PIC 9(14).
PROCEDURE DIVISION.
INICIO-PROGRAMA.
* BLOQUE PRINCIPAL DEL PROGRAMA
OPEN I-O A-ARTICULO.
PERFORM INS-PATATA.
PERFORM INS-REGS.
PERFORM LIS-ARTICULOS.
PERFORM CON-TERNERA.
PERFORM MOD-PATATA.
PERFORM BORRAR-LECHUGA.
CLOSE A-ARTICULO.
STOP RUN.
* INSERTAR REGISTRO PATATA
INS-PATATA.
MOVE 10 TO COD-ARTI.
MOVE 'PATATA' TO NOM-ARTI.
MOVE 100 TO CAN-ARTI.
MOVE COD-ARTI TO DIR-RELATIVA.
WRITE R-ARTICULO.
* INSERTAR MAS REGISTROS EN FICHERO
INS-REGS.
MOVE 20 TO COD-ARTI.
MOVE 'TERNERA' TO NOM-ARTI.
MOVE 200 TO CAN-ARTI.
MOVE COD-ARTI TO DIR-RELATIVA.
WRITE R-ARTICULO.
MOVE 11 TO COD-ARTI.
MOVE 'LECHUGA' TO NOM-ARTI.
MOVE 110 TO CAN-ARTI.
MOVE COD-ARTI TO DIR-RELATIVA.
WRITE R-ARTICULO.
* LEER EN SECUENCIA EL ARCHVO DEL ARTICULOS Y MOSTRARLO
LIS-ARTICULOS.
DISPLAY SPACE LINE 20 ERASE.
DISPLAY 'ARCHIVO RELATIVO DE ARTICULOS'.
DISPLAY '-----------------------------'.
MOVE 'N' TO FIN-ARTICULO.
READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO
END-READ.
******* PERFORM UNTIL FIN-ARTICULO = 'S'
******* DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
******* END-PERFORM.
DISPLAY COD-ARTI '-' NOM-ARTI '-' CAN-ARTI.
READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO
END-READ.
DISPLAY '----FIN DEL ARTICULO----'.
DISPLAY SPACE.
* CONSULTAR TERNERA
CON-TERNERA.
MOVE 20 TO DIR-RELATIVA.
READ A-ARTICULO.
* MODIFICAR EL REGISTRO PATATA
MOD-PATATA.
MOVE 10 TO DIR-RELATIVA.
MOVE 'PATATA' TO NOM-ARTI.
MOVE 100 TO CAN-ARTI.
WRITE R-ARTICULO.
* BORRAR EL REGISTRO LECHUGA
BORRAR-LECHUGA.
MOVE 11 TO DIR-RELATIVA.
DELETE A-ARTICULO.
se que me hace un bucle infinito donde he puesto los ******* pero no logro salir de ahi y me jode por que creo que con eso el programa esta terminado alguien que me pueda dar una mano?
gracias
|
 
|
|
Kuk

España
240 Mensajes
OFF-Line
| Enviado el 28-07-2010 :: 20:41  
No logras salir de donde??? Explicate bien!
Si te refieres al bucle, es evidente que tienes que poner el READ dentro del bucle y no fuera, o sea:
PERFORM UNTIL FIN-FICHERO
READ...
DISPLAY
END-PERFORM
Saludos
|
 
|
|
darkcap

16 Mensajes
OFF-Line
| Enviado el 28-07-2010 :: 21:22  
ya lo he probado pero si meto el read dentro del perfom se me revienta todo empieza a darme errores por todos lados..
|
 
|
|
Kuk

España
240 Mensajes
OFF-Line
| Enviado el 28-07-2010 :: 23:26  
Entre el PERFROM UNTIL y el END-PERFORM no puede haber puntos!!!
P.D. Y si no, dime que errores son los que te salen
[ Este mensaje fue editado por: Kuk el 28-07-2010 23:27 ]
|
 
|
|
Lascu

Videla (Santa Fe)
160 Mensajes
OFF-Line
| Enviado el 28-07-2010 :: 23:52  
Hola darkcap
Si mal no entendì, lo que vos queres hacer en el bucle es que te muestre todo el archivo de manera secuencial. El metodo para ello es antes del read tenes que posicionarte dentro del archivo con la sentencia start y luego leer dentro del bucle los registros.
Probà con el siguiente còdigo:
LIS-ARTICULOS.
DISPLAY SPACE LINE 20 ERASE.
DISPLAY 'ARCHIVO RELATIVO DE ARTICULOS'.
DISPLAY '------------'.
INITIALIZE DIR-RELATIVA.
START A-ARTICULO KEY >= DIR-RELATIVA.
MOVE 'N' TO FIN-ARTICULO.
PERFORM UNTIL FIN-ARTICULO = 'S'
READ A-ARTICULO NEXT RECORD
AT END
MOVE 'S' TO FIN-ARTICULO
NOT AT END
DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
DISPLAY COD-ARTI '-' NOM-ARTI '-' CAN-ARTI
END-READ
END-PERFORM.
DISPLAY '----FIN DEL ARTICULO----'.
DISPLAY SPACE.
De esta manera deberìa funcionar. Para ser mas preciso se deberìa colocar el codigo del bucle por la opcion "NOT INVALID KEY" de la sentencia START por si el archivo estuviera vacìo.
Saludos
Marcelo Lascurain
Videla (SF) - Republica Argentina.
[ Este mensaje fue editado por: Lascu el 28-07-2010 23:56 ]
|
 
|
|
darkcap

16 Mensajes
OFF-Line
| Enviado el 30-07-2010 :: 09:31  
gracias por la ayuda pero sigue fallando
RM/COBOL-85 (Version 5.36.00) for DOS 2.00+ 30/07/10 08:19:34 Page 2
Source file: FINAL.CBL Options: L
LINE DEBUG PG/LN -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN EJFINAL
58 000059 MOVE 100 TO CAN-ARTI.
59 000066 MOVE COD-ARTI TO DIR-RELATIVA.
60 000071 WRITE R-ARTICULO.
61
62 * INSERTAR MAS REGISTROS EN FICHERO
63
64 000087 INS-REGS.
65
66 000090 MOVE 20 TO COD-ARTI.
67 000097 MOVE 'TERNERA' TO NOM-ARTI.
68 000105 MOVE 200 TO CAN-ARTI.
69 000112 MOVE COD-ARTI TO DIR-RELATIVA.
70 000117 WRITE R-ARTICULO.
71 000131 MOVE 11 TO COD-ARTI.
72 000138 MOVE 'LECHUGA' TO NOM-ARTI.
73 000146 MOVE 110 TO CAN-ARTI.
74 000153 MOVE COD-ARTI TO DIR-RELATIVA.
75 000158 WRITE R-ARTICULO.
76
77 * LEER EN SECUENCIA EL ARCHVO DEL ARTICULOS Y MOSTRARLO
78 000174 LIS-ARTICULOS.
79
80 000177 DISPLAY SPACE LINE 20 ERASE.
81 000190 DISPLAY 'ARCHIVO RELATIVO DE ARTICULOS'.
82 000198 DISPLAY '------------'.
83
84 000206 INITIALIZE DIR-RELATIVA.
85 000212 START A-ARTICULO KEY >= DIR-RELATIVA.
86 000228 MOVE 'N' TO FIN-ARTICULO.
87 000234 PERFORM UNTIL FIN-ARTICULO = 'S'
88 READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO NOT A
$
***** 1) 0263: E Identifier is not defined. (scan suppressed).
89 DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
$
***** 1) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 88.
90 DISPLAY 'COD-ARTI '-' NOM-ARTI '-' CAN-ARTI '
$
***** 1) 0052: W Space separator expected.
***** 1) 0300: E Zero length literal is not permitted. This may be caused by extraneous plus sign, minus sign, or period.
(scan suppressed).
*****Previous diagnostic message occurred at line 89.
91 END-READ
$
***** 1) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 90.
92 END-PERFORM.
93 000287 DISPLAY '----FIN DEL ARTICULO----'.
94 000296 DISPLAY SPACE.
95
96 * CONSULTAR TERNERA
97
RM/COBOL-85 (Version 5.36.00) for DOS 2.00+ 30/07/10 08:19:34 Page 3
Source file: FINAL.CBL Options: L
LINE DEBUG PG/LN -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN EJFINAL
98 000308 CON-TERNERA.
99
100 000311 MOVE 20 TO DIR-RELATIVA.
101 000318 READ A-ARTICULO.
102
103 * MODIFICAR EL REGISTRO PATATA
104
105 000334 MOD-PATATA.
106 000337 MOVE 10 TO DIR-RELATIVA.
107 000344 MOVE 'PATATA' TO NOM-ARTI.
108 000352 MOVE 100 TO CAN-ARTI.
109 000359 WRITE R-ARTICULO.
110
111 * BORRAR EL REGISTRO LECHUGA
112
113 000375 BORRAR-LECHUGA.
114 000378 MOVE 11 TO DIR-RELATIVA.
115 000385 DELETE A-ARTICULO.
RM/COBOL-85 (Version 5.36.00) for DOS 2.00+ 30/07/10 08:19:34 Page 4
Source file: FINAL.CBL Options: L
Program Summary Statistics EJFINAL
Read only size: 936 (X"000003A8") bytes
Read/write size: 250 (X"000000FA") bytes
Overlayable segment size: 0 (X"00000000") bytes
Total generated object size: 1186 (X"000004A2") bytes
Errors: 2, Warnings: 1, Lines: 115 for program EJFINAL.
Previous diagnostic message occurred at line 91.
alguna idea de a que es debido"
gracias por adelantado
|
 
|
|
Kuk

España
240 Mensajes
OFF-Line
| Enviado el 30-07-2010 :: 11:54  
88 READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO NOT A
$
***** 1) 0263: E Identifier is not defined. (scan suppressed).
Pone bien el NOT AT END y la sentencia que quieras despues.
89 DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
$
Despues del 'REG: ' falsta la variable a displayar
90 DISPLAY 'COD-ARTI '-' NOM-ARTI '-' CAN-ARTI '
$
*****
A esto le sobra comillas, tiene que ser asi DISPLAY COD-ARTI ' - ' NOM-ARTI ' - ' CAN-ARTI
|
 
|
|
darkcap

16 Mensajes
OFF-Line
| Enviado el 30-07-2010 :: 12:05  
a ver el codigo que tengo escrito es
NITIALIZE DIR-RELATIVA.
START A-ARTICULO KEY >= DIR-RELATIVA.
MOVE 'N' TO FIN-ARTICULO.
PERFORM UNTIL FIN-ARTICULO = 'S'
READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO NOT AT END
DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
DISPLAY COD-ARTI '-' NOM-ARTI '-' CAN-ARTI
END-READ
END-PERFORM.
DISPLAY '----FIN DEL ARTICULO----'.
DISPLAY SPACE.
pero al compilar me dice esto
87 000234 PERFORM UNTIL FIN-ARTICULO = 'S'
88 READ A-ARTICULO NEXT RECORD AT END MOVE 'S' TO FIN-ARTICULO NOT A
$
***** 1) 0263: E Identifier is not defined. (scan suppressed).
89 DISPLAY 'DR: ' DIR-RELATIVA 'REG: '
$
***** 1) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 88.
90 DISPLAY COD-ARTI '-' NOM-ARTI '-' CAN-ARTI
91 END-READ
92 END-PERFORM.
en teoria el at end esta puesto..
|
 
|
|
FitoCirano

Villa María
148 Mensajes
OFF-Line
| Enviado el 30-07-2010 :: 12:35  
Hola Amigo:
Si desde el READ hasta el NOT AT END están en el mismo renglón, te estás pasando de la columna 72, entonces te trunca la sentencia, fijate que donde está el error te llega hasta NOT A.
Saludos.
----------------- Fito (Villa María - CBA - Argentina)
|
 
|
|
darkcap

16 Mensajes
OFF-Line
| Enviado el 30-07-2010 :: 12:51  
bueno bucle solucionado aunque ahora me da errores en tiempo de ejecucion
concreatamente
COBOL I/O error 22 on A -Articulo
COBOL I/O error at line 60 que viene a ser
54 000041 INS-PATATA.
55
56 000044 MOVE 10 TO COD-ARTI.
57 000051 MOVE 'PATATA' TO NOM-ARTI.
RM/COBOL-85 (Version 5.36.00) for DOS 2.00+ 30/07/10 12:42:11 Page 2
Source file: FINAL.CBL Options: L
LINE DEBUG PG/LN -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN EJFINAL
58 000059 MOVE 100 TO CAN-ARTI.
59 000066 MOVE COD-ARTI TO DIR-RELATIVA.
60 000071 WRITE R-ARTICULO.
61
62 * INSERTAR MAS REGISTROS EN FICHERO
sabes a que es debido"
|
 
|
|