Instrucción *erform
E- EC'T%NDO %NTES O DES*'ES
n primer lu#ar, por defecto el contenido del @R<)RM se ejecuta después de hacer la comprobación de la condición $ue precede a UNGIL , pero podemos hacer $ue ésta se realice antes
*E!FO!& IT) TEST %FTE! $ (EFO!E / ,%!5IN# variable F!O& n&mero$ variable(5
n&mero$ valor 'NTIL condición sentencias
END$*E!FO!&
"on la opción G&G <)R, $ue es la opción por defecto se comprueba primero la condición y si se cumple se ejcuta el resto, con lo cual es posible $ue las sentencias no se ejecuten nin#una +e5, si al comen5ar ya est* rota la condición
"on la opción G&G !<GR, se ejecutan las sentencias antes de comprobar la condición, con lo cual las sentencias se +an a ejecutar al menos en una ocasión, incluso aun$ue entremos en el @R<)RM con la condición rota
%'&ENT%NDO L%S CONDICIONES
fecti+amente adem*s de la primera condición podemos incrementar el n>mero de condiciones para $ue se cumplan los re$uisitos y as% ejecutar las sentencias sto lo conse#uimos incluyendo mas cl*usulas precedidas de !<GR
*E!FO!& IT) TEST %FTE! $ (EFO!E / ,%!5IN# variableF!O& n&mero$ variable (5n&mero$ valor 'NTIL condición
%FTE! variableF!O& n&mero$ variable(5 n&mero$ valor 'NTILcondición sentencias
%FTE! ... END$*E!FO!&
!l aplicar este formato cuando se cumpla la primera condición pasar* el control al !<GR y
comprobar* de nue+o la condición $ue precede al si#uiente UNGIL se#>n los +alores especificados en la l%nea $ue contiene !<GR !dem*s podemos ir incrementando el n>mero de condiciones a nuestro antojo, consi#uiendo de éste modo hacer unos anidamientos y un desarrollo mas completo de la sentencia, obteniendo por consi#uiente unos ni+eles de perfeccionamiento muy altos
!ES'&IENDO
Una mayor utili5ación de @R<)RM sin duda traer* un uso menor de la declaración E) y con ello conse#uimos una pro#ramación estructurada Las +entajas de la pro#ramación estructurada las $uiero e:plicar en un apartado dentro de ésta misma sección de Manuales, una +e5 e:pli$ue las sentenicas E) e I<, $ue ser*n la si#uiente aportación al manual
n esa nue+a sección se +er* un caso mas pr*ctico y real de utili5ación de @R<)RM con uso de lecturas de ficheros y dem*s e:periencias cotidianas en el mundo de la pro#ramación en el *mbito de la #estión
Códios de Error
12.72 palabras totales en este te:to3 167=2 Lecturas3
&on muchos los errores $ue se pueden producir en tiempo de ejecución cuando trabajamos con archi+os, a continuación daré una e:plicación de los mas comunes Godos éstos errores los podemos obtener si definimos <IL &G!GU& en la <IL'")NGR)L, y actuar consecuentemente, por ejemplo yo siempre cuando abro los ficheros al principio de cada pro#rama compruebo $ue el error sea , es decir $ue todo est* bien para continuar, sino automaticamente saco una +entanita con el error $ue se ha producido y el nombre del fichero para $ue mis usuarios me lo comuni$uen y poder solucionarlo, pero no dejo $ue se si#a ejecutando el pro#rama, con lo $ue se e+itar*n problemas posteriores $ue podr%an resultar peores (e todas formas una +e5 $ue est* el pro#rama +erificado y comprobado, y $ue todos los archi+os se corresponden con su descripción en la <(, los errores $ue nos puede dar son los relati+os a cla+es duplicadas o ine:istentes, o a errores del sistema
Los errores se representan como 6 di#itos para el error $ue pueden ir se#uidos de una coma y otros 6 d%#itos para indicar la naturale5a del error
E!!O! E9*LIC%CION
)peración satisfactoria, todo bien
2 "uando se ha lle#ado al final del fichero y se $uiere se#uir leyendo 66 &e intenta copiar un re#istro con una cla+e ya e:istente
6; "uando se hace un acceso directo a un re#istro ine:istente 6- No hay espacio en disco para reali5ar la operación
; s un error #ra+e de entrada/salida, suele ser ajeno a "obol y mas concreto en cuanto a confi#uración del sistema operati+o sobre el $ue se est* ejecutando, para solucionarlo deberemos prestar atención a los dos d%#itos se#uientes al error
;- I#ual $ue el 6- por falta de espacio en disco ;= l archi+o al $ue hace referencia no e:iste
;? La or#ani5ación del fichero $ue se $uiere abrir no coincide con su or#ani5ación real interna &uele pasar cuando se modifica una <( y el fichero continua siendo el mismo
-2 "uando intentamos abrir un archi+o $ue ya est* abierto -6 &i intentamos cerrar un archi+o $ue no esta abierto
-; "uando se $uiere borrar o reescribir un re#istro en un fichero abierto con acceso secuencial
-7 &e $uiere reali5ar al#una operación $ue no corresponde con el modo de acceder al fichero &i $ueremos hacer un R!( o un &G!RG en un archi+o $ue no ha sido abierto como IN@UG o como I')
-. I#ual $ue el anterior, pero para el caso de $uerer escribir en un fichero $ue no esta abierto o no est* abierto como I'), )UG@UG o XGN(
-? "uando $ueremos borrar o reescribir en un fichero $ue no ha sido abierto como I') o el fichero no est* abierto
? "uando "))L recibe un mensaje irreconocible, suele estar
ocasionado por incompatibilidad entre los accesos a los ficheros, su forma de apertura y su modo de acceso
?2 I#ual $ue el -6
?6 "uando intentamos leer, escribir, borrar, reescribir sobre un archi+o no abierto
?; l archi+o est* en conflicto con otro usuario
?- I#ual $ue el ;?, tiene muchisimas +ertientes dependiendo de los dos di#itos si#uientes $ue acompa8an al error
?. chate a temblar 1perdonad por la e:presión3, #ra+e error interno en la estructura del fichero, #eneralmente se suelen pro+ocar cuando hay un corte electrico o una salida brusca del pro#rama y al#>n fichero inde:ado se ha $uedado abierto, lo $ue suele ocurrir es problema de correspondencia entre cla+es y datos, se recomienda hacerle un reco+ery 1RM/"))L3 o el $ue corresponda a cada compilador para rehacer las cla+es &i después de todo si#ue dando errores V
n al#unos casos, es posible $ue éste error se deba a un problema f%sico del disco, en ese caso también ser* con+eniente copiarlo en otro sitio Of%sicoO
?? !l borrar, leer o reescribir un re#istro $ue est* siendo blo$ueado por otro usuario
! pesar de todos éstos errores con al#unos de ellos podriamos se#uir trabajando, pero siempre es mejor corre#irlos antes de $ue pasen a mayores
@ara e+itar blo$ueos en los re#istros cuando trabajamos con +arios usuarios accediendo a los mismos re#istros, es con+enientoe tener en cuenta los modos de apertura de los ficheros, ya $ue abriéndolos en IN@UG nunca habr* problema de blo$ueo
,entanas
p*#ina1s3 0 2/6
16-;7 palabras totales en este te:to3 16;.= Lecturas3
Fue son y para $ue sir+en las O+entanasO en cobol V
ste nombre del $ue estamos tan acostumbrados a oir y $ue parece $ue es propiedad de Microsoft, tiene otras y muy di+ersas utilidades Una +entana es en realidad una porción +irtual de la pantalla, la cual podremos definir con unas caracter%sticas propias de tama8o, color, etc
Dasta $ue éstas aparecieron, cada +e5 $ue $ueriamos sobreponer una información a la $ue ten%amos en pantalla, la construiamos encima y después, debiamos de +ol+er a pintar la $ue estu+iera debajo "on el uso de las +entanas ésto ya no es necesario )s pondré un ejemplo0
&upon#amos $ue tenemos un mantenimiento de clientes, el cual nos ocupa toda la pantalla, y +amos a introducir la pro+incia &i en éste momento $uisieramos mostrarle una tabla con todas las opciones
posibles, era necesario dibujarla encima y una +e5 seleccionada la pro+incia adecuada, +ol+er a pintar la pantalla de mantenimiento $ue hab%amos dejado debajo @ues bien con el uso de las +entanas, ésto ya no es necesario, por$ue lo $ue hacemos es crear una +entana 1una pantalla +irtual3 de las
dimensiones $ue $ueramos, trabajamos todo lo $ue $ueramos con ella y cuando no nos ha#a falta, la cerramos y lo $ue hab%a debajo en la pantalla OprincipalO $uedar* como estaba spero $ue me hayais entendido, para poder se#uir e:plicando su utili5ación
Ko cono5co el uso en !cucobol y RM/"obol, por lo $ue la e:plicación ir* orientada a éstos dos compiladores, si al#uien conoce la de otros, le animo a $ue me facilite la e:plicación
(ebemos de tener en cuenta $ue aun$ue la sinta:is sea diferente en cada uno de los compiladores, la funcionalidad, el uso y la idea, son las mismas !ntes de pasar a la e:plicación tendremos $ue tener en cuenta0
@odremos tener tantas +entanas abiertas como $ueramos
l control siempre estar* sobre la +entana acti+a, no podremos trabajar desde una +entana en otra
La linea 2 y la columna 2 corresponder*n a la es$uina superior i5$uierda de la +entana y no a la de la pantalla
Las caracter%sticas de la +entana se dar*n en el momento de su creación y ser*n, t%tulo, posición del t%tulo, borde, color, tama8o, etc
,ENT%N%S EN !&+CO(OL.
n RM/"obol, todas las caracter%sticas se dan mediante unas +ariables definidas en la B)RHINE, éstas son las si#uientes @or supuesto le puedes poner el nombre $ue $uieras a las +ariables, ya $ue lo $ue al final +amos a conse#uir es darle una +ariable con lon#itud . y una sentencia para $ue la +entana se dibuje
2 B"
; BIN"! @I" ??? IN!RK C!LU ; BINLIN @I" ??? IN!RK
; BIN")L @I" ??? IN!RK ; BINL)" @I" X C!LU O&O 9 1&'B3
; BIN)R&G @I" X C!LU OKO
9 1K'N3
; BIN)RGI @I" ? C!LU 6 ; BIN)R"D @I" X
; BINLL @I" X
9 1K'N3
; BINLL"D @I" X
; BINGIG&I @I" X C!LU OGO
9 1G'3
; BINGIG@) @I" X C!LU O"O 9 1"'L'R3
; BINGIGL) @I" ??? IN!RK ; BINGIG @I" X14-3
:plicación de las +ariables0 1de las importantes3
C(: !$u% se #uardar* toda la información para lue#o dibujar la +entana, podeis ponerle el nombre
$ue $uerais, tanto a ésta como al resto
INLIN0 N>mero de lineas $ue +a a tener la +entana INCOL0 N>mero de columnas $ue +a a tener la +entana IN(O!ST0 1K3& 1N3), si +a a tener o no, borde
INTITSI0 1G3)@ 13UGG)N, posición del t%tulo, arriba o abajo INTIT*O0 1"3NGR 1L3<G 1R3IEDG, justificación del t%tulo INTITLO0 Lon#itud en caracteres del t%tulo
INTIT0 G%tulo de la +entana
La sentencia $ue utili5amos para crearla es (I&@L!K, pero con unos matices distintos como +amos a +er a continuación
@rimero mo+er%amos los +alores adecuados a las +ariables y lue#o la sentencia, +eamos como $uedar%a0
M)C 2 G) BINLIN M)C - G) BIN")L
M)C O @R)!N() CNG!N!& O G) BINGIG M)C 2? G) BINGIGL)
(I&@L!K B" LIN ; ")L ; L)B R!& ")NGR)L OBIN()B'"R!GO
9 asi creariamos la +entana, los otros +alores de las +ariables se 9 pueden asi#nar con +alues, por$ue normalmente no cambian 9 ! partir de éste momento, todo lo $ue ha#amos, se har* sobre 9 ésta +entana @ara cerrarla utili5ariamos ésta sentencia
(I&@L!K B" ")NGR)L OBIN()B'RM)CO
&i $uisieramos abrir mas +entanas, en +e5 de displayar directamente la +ariable B", ésta la #uardariamos en una tabla por ejemplo0
B)RHINE'&G)R!E &"GI)N 2 CNG!N!&
6 BIN @I" X1.3 )""UR& 2 GIM& @R)"(UR (ICI&I)N M)C 2 G) BINLIN M)C - G) BIN")L M)C O @R)!N() CNG!N!& O G) BINGIG M)C 2? G) BINGIGL) M)C B" G) BIN 123
(I&@L!K BIN 123 LIN ; ")L ; L)B R!& ")NGR)L OBIN()B'"R!GO M)C 2 G) BINLIN
M)C ; G) BIN")L
M)C &@!"& G) BINGIG M)C G) BINGIGL) M)C B" G) BIN 163
(I&@L!K BIN 163 LIN = ")L 2 L)B R!& ")NGR)L OBIN()B'"R!GO
9 "uando usamos mas de una +entana, deberemos de ir 9 cerr*ndolas se#>n la >ltima $ue se abrió
(I&@L!K BIN 163 ")NGR)L OBIN()B'RM)CO (I&@L!K BIN 123 ")NGR)L OBIN()B'RM)CO
,ENT%N%S EN %C'CO(OL.
incluir en la B)RHINE una +ariable de @I" X123, $ue nos ser+ir* principalmente para tener +arias +entanas abiertas y saber sobre cual actuamos sto se consi#ue con una implementación de la sentencia (I&@L!K, $ue +amos a e:plicar a continuación
B)RHINE'&G)R!E &"GI)N 2 CNG!N!&
6 BIN @I" X123 )""UR& 2 GIM&
@R)"(UR (ICI&I)N
(I&@L!K BIN()B LIN ; ")L ; L)B R!& &IA - LIN& 2
)X( &D!()B
G)@ "NGR( GIGL O @R)!N() O @)@'U@ !R! BIN 123
9 @ara cerrarla, utili5aremos la si#uiente instrucción "L)& BIN()B BIN 123
!$ui, la #ran diferencia, es $ue al no utili5ar +ariables, los +alores se le dan en la propia sentencia, y la e:plicación de cada uno ser%a0
SI2E0 N>mero de columnas de la +entana LINES0 N>mero de l%neas de la +entana (O9ED0 Indicamos $ue lle+a borde
S)%DO0 Indicamos $ue lle+a efecto de sombra TO*0 @osición del t%tulo 1G)@')GG)M3
CENTE!ED0 Justificación del t%tulo 1"NGR(, L<G, RIEDG3 *O*$'* %!E%0 donde se #uarda la +entana
La sentencia (I&@L!K BIN()B, en !cucobol, es mucho mas e:tensa, incluyendo sobre todo una muy buena aplicación de los colores, tanto para el fondo como para el primer plano
!ES'&IENDO
Ka +eis, $ue aun$ue cambie un poco la sinta:is, el fin es e:actamente el mismo, disponer de una parte de la pantalla con autonom%a propia
&olo espero $ue después de éstas e:plicaciones seais capaces de apro+echar todas las +entajas $ue nos puede proporcionar el trabajar con +entanas Ko siempre las he utili5ado, eso si, tampoco
deberemos de hacer de un pro#rama cobol, una serie de +entanas, hay $ue utili5arlas cuando realmente las necesitemos Recordad $ue0
l control solo ser* sobre la +entana acti+a
Una +e5 abierta una +entana, ésta tendr* el control, hasta $ue se cierre
@or supuesto, todas la +ariables $ue utilicemos ser*n portables entre +entanas, ya $ue en realidad estaremos en el mismo pro#rama
*ala<ras !eservadas
12-44 palabras totales en este te:to3 16;6? Lecturas3
Las palabras reser+adas del "obol, son a$uellas $ue el propio compilador utili5a y por lo tanto no podemos utili5ar como +ariables en nuestros pro#ramas stas han ido a+an5ando con el paso de los tiempos y cada compilador incluso, incluyendo nue+as !$u% +oy a poner una lista de la cantidad mayor $ue pueda
SELECCION% L% LET!%= *%!% I! DI!ECT%&ENTE O %,%N2% *O! L% *%#IN%
% ( C D E F # ) I - " L & N O * ; ! S T ' , 2 Otras
%
!((R&& !(C!N"INE !<GR
!LL !L@D!G !L@D!GI"
!L@D!GI"'L)BR !L@D!GI"'U@@R !@D!NUMRI"
!L@D!NUMRI"'(IG( !L&) !LGR
!LGRN!G !N( !NK
!@@LK !R !R!
!R!& !&"N(INE !&&IEN
!G !UGD)R !UG)
!UG)'&HI@ !UG)M!GI" !UG)GRMIN!G
(
!"HER)UN( !"HER)UN('")L)R !"HER)UN('DIED
!"HER)UN('L)B !"HB!R( @ <)R LL IN( IN!RK L!NH LINH LINHINE L)"H )L( )GG)M K C "!LL "!N"L "( "< "D "D!R!"GR
"D!R!"GR& "L!&& "L)&
"))L ")( ")('&G
")L ")LL!GINE ")LUMN
")MM! ")MMUNI"!GI)N ")M@
")M@'2 ")M@'6 ")M@';
")M@'- ")M@'4 ")M@UG!GI)N!L
")M@UG!GI)N!L'2 ")M@UG!GI)N!L'6 ")M@UG!GI)N!L';
")M@UG!GI)N!L'- ")M@UG ")N<IEUR!GI)N
")N&)L ")NG!IN& ")NGNG ")NGINU ")NGR)L ")NGR)L& ")NCR&I)N ")NCRG ")NCRGINE ")@K ")RR ")RR&@)N(INE ")UNG "RG "URRN"K "UR&)R D (!G! (!G (!G'")M@IL( (!G'BRIGGN (!K (!K')<'BH ( (UE (UEEINE
("IM!L'@)ING ("L!R!GIC& (<!ULG
(LG (LIMIG( (LIMIGR
(@N(INE (&"N(INE (&GIN!GI)N
(G!IL (I&!L (I&@L!K
(ICI( (ICI&I)N (R!BN (U@LI"!G& (KN!MI" E "D) EI L& MI M@GK'"D"H N!L( N( N('!""@G N('!((
N('"!LL N('")M@UG N('(LG
N('(ICI( N('C!LU!GF N('I<
N('MULGI@LK N(')<'@!E N('@R<)RM
N('R!( N('R"IC N('RGURN
N('RBRIG N('&!R"D N('&G!RG
N('&GRINE N('&UGR!"G N('UN&GRINE
N('BRIG NGR NCIR)NMNG
)L )@ )&
FU!L R!& RR)R
&"!@ &I C!LU!G
CRK X"@GI)N X"LU&IC
XIG XGN( XGRN!L
F
<!L& <( <IL
<IL'")NGR)L <IL'I( <IL'@R<IX
<ILLR <IN!L <IR&G
<))GINE <)R <)RER)UN('")L)R
<)RER)UN('")L)UR <R)M <ULL
#
ENR!G EICINE EL)!L
E) E)!"H ER!GR
ERI( ER)U@
)
D!(INE DIED DIED'!LU
DIED'C!LU& DIEDLIEDG
I
I') I') ")NGR)L I(NGI<I"!GI)N
I< IN IN(X
IN(X( IN(I"!G INIGI!L
INIGI!LIA IN@UG IN@UG')UG@UG
IN&@"G IN&G!LL!GI)N ING)
INC!LI( I& - JU&G JU&GI<I( " HK L L!L L!&G L!(INE L<G L<GLIN LNEGD
LNEGD'"D"H L&& LIMIG
LIMIG& LIN!E LINE!H'")UNGR
LIN& LINH!E L)"H
L)B'C!LU& L)BLIEDG & MM)RK MRE M)( M)(UL& M)C MULGI@L MULGI@LK N N!GIC NE!GIC NXG N) N)'"D) N)G
NUMR NUMRI" NUMRI"'(IG(
O )J"G'")M@UGR )""UR& )< )<< )MIGG( )N )@N )@GI)N!L )R )R(R )RE!NIA!GI)N )GDR )GDR& )UG@UG )CR<L)B )CRLIN *
@!"H('("IM!L @!((INE @E
@!E'")UNGR @R<)RM @I"
@I"GUR @LU& @)INGR
@)& @)&IGI)N @)&IGIC
@RCI)U& @RING'")NGR)L @RINGINE
@R)"(UR @R)"(UR& @R)"(
@R)ER!M @R)ER!M'I( @R)M@G
@R)G"G( @URE
;
FUU FU)G FU)G&
!
R!N()M R( R!(
R!(R& R"IC R")R(
R")R(INE R")R(& R(<IN&
RL R<RN" R<RN"&
RL!GIC RL!& RM!IN(R
RM)C!L RN!M& R@L!"
R@L!"INE RFUIR( R@)RG
R@)RGINE R@)RG& RRUN
R&RC RGURN RGUNRNIN
RGURN'")( RGURN'UN&IEN( RCR&
RCR&'CI() RCR&( RBIN(
RBRIG R< RD
RIEDG R)LL!"H RUN
S
&!R"D &"GI)N &"UR
&"URIGK &EMNG &EMNG'LIMIG
&L"G &N( &NGN"
&@!R!G &FUN" &FUNGI!L
&G &IEN &IA
&)RG &)RG'MRE &)UR"
&)UR"'")M@UGR &@!" &@!"&
&@"I!L'N!M& &G!N(!R( &G!RG
&G!GU& &G)@ &GRINE
&UGR!"G &U@@R&& &KM)LI" &KN" &K"DR)NIA(
T
G! G!LLKNE G!@
GRMIN!L GRMIN!G G&G
GXG GD!N GDN
GDR)UED GDRU GIM
GIM& G) G)@
GR!ILINE GRU
'
UN(RLIN UN(RLIN( UNIG
UNL)"H UN&GRINE UNGIL
U@ U@(!G U@(!G&
U@)N U&!E U&
U&INE
,
C!LU C!LU& C!RKINE
BDN BIGD B)R(&
B)RHINE'&G)R!E BRIG BRIGR&
2
AR) AR)& AR)&
!dem*s de todas éstas palabras, cada compilador ha ido incorporando nue+as a su lista, debido principalmente a la incorporación de aspectos destinados a la pro#ramación #r*fica ntre ellos podemos citar al#unos de los nue+os incorporados por !cucobol0
!GGRIUG !UG)'MINIMIA !UG)'R&IA
)X )X( "")L "LL "LL& "NGR( ")L)R ")L)UR "&IA "K"L (&GR)K ()UL ()BN N"RK@GI)N N('(I&@L!K CNG <XGRN!L'<)RM <IL'@R<IX <L)!G <L)!GINE <)NG ER!@DI"!L D!N(L DIEDG
DL@'I( I")N I(
I(NGI<I( INFUIR LINH
L)BR M!NU!L MNU
M&&!E M)(!L M)(L&&
M)(I<K NULL NULL
)J"G )NLK )CRL!@@(
@!R!ER!@D @)@'U@ @RI)RIGK
@R)@RGK R&IA!L &"R)LL
&D!()B &GKL &K&GM
&K&GM'IN<) G!L GRMIN!L'IN<)
GDR!( GIGL GIGL'!R
G))L'!R GR!N&!"GI)N U@@R
CI&IL B!IG BI(GD
BIN()B BR!@