Método de las Décadas ABC
Código fuente DEC Basic 'DecadasABC.BAS'
Seleccione con el mouse el texto disponible más abajo entre las dos líneas rojas.
Mediante las opciones de Copiar y Pegar llévelo al Block de Notas y grábelo en su disco duro como DecadasABC.bas
Transfiéralo al host mediante cualquier software de transferencia de archivos.
El el host realice las siguientes instrucciones:
BASIC DecadasABC ----------------// Compilación de subprograma (Se genera DecadasABC.obj)
COBOL TestABC--------------------// Compilación de programa llamador (Se genera TestABC.obj)
LINK TestABC,DecadasABC--------// Generación de imagen ejecutable (TestABC.exe)
RUN TestABC
10! sub DecadasABC (Fecha6$,Fecha8$,Inferior$) ! DEC BASIC (Vax/VMS, Alpha/OpenVMS) Eduardo Navarro - 1998
! Subprograma para transformar fechas del formato AAMMDD ! al formato AAAAMMDD y viceversa. ! ! Opera como un objeto (DecadasABC.obj) llamado desde un programa principal. ! Tiene como argumentos los valores Fecha6, Fecha8 y AAAAinferior (año inferior). ! ! Recibe Fecha6 o Fecha8 (sólo uno de ellos, el otro debe ser igual a SPACES) ! El valor de retorno al programa llamador queda en Fecha8 o Fecha6 según corresponda. ! ! En valor AAAAinferior se utiliza sólo en la conversión de 6 a 8 caracteres, ! con el fin de actuar como referencia para interpretar fechas de 6 caracteres ! numéricos, como del siglo actual o como del próximo.
on error goto Formato
if (Fecha6$ > space$(6) and Fecha8$ > space$(8) ) or & (Fecha6$ <= space$(6) and Fecha8$ <= space$(8) ) then goto Formato end if if Fecha6$ > space$(6) then gosub De6a8 else gosub De8a6 end if
goto fin
100 De6a8: Decadas2000$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Fecha6$ = edit$(Fecha6$,32%) aa$ = seg$(Fecha6$,1,2) if aa$ >= "A0" then p = pos(Decadas2000$,seg$(aa$,1,1),1) if p > 0 then p = p - 1 if p < 10 then aaaa$ = "20"+str$(p)+seg$(aa$,2,2) else aaaa$ = "2"+str$(p)+seg$(aa$,2,2) end if else aaaa$ = "19"+aa$ end if else aaaa$ = "19"+aa$ end if if aaaa$ < Inferior$ then aaaa$ = "20" + aa$ Fecha8$ = aaaa$ + seg$(Fecha6$,3,6) gosub De8a6 else Fecha8$ = aaaa$ + seg$(Fecha6$,3,6) end if return
200 De8a6:
Decadas2000$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
aaaa$ = seg$(Fecha8$,1,4)
if aaaa$ > "1999" and aaaa$ <= "2259" then
a = val(seg$(aaaa$,2,3))+1
aa$ = seg$(Decadas2000$,a,a) + seg$(aaaa$,4,4)
else
if aaaa$ < "2000" and aaaa$ >= "1900" then
aa$ = seg$(aaaa$,3,4)
else
aa$ = "--"
end if
end if
Fecha6$ = aa$ + seg$(Fecha8$,5,8)
return
300 Formato: print "" print "Formato:" print "WORKING-STORAGE SECTION." print '01 VARIOS.' print ' 05 Fecha6.' print ' 10 AA6 PIC X(02).' print ' 10 MM6 PIC 9(02).' print ' 10 DD6 PIC 9(02).' print ' 05 Fecha8.' print ' 10 AAAA8 PIC 9(04).' print ' 10 MM8 PIC 9(02).' print ' 10 DD8 PIC 9(02).' print ' 05 aaaaInferior PIC 9(04).' print "..." print "PROCEDURE DIVISION." print "..." print "..." print ' Move spaces to Fecha8.' print ' Move "031016" to Fecha6.' print '* o bien Move "A31016" to Fecha6. (en este caso no se requiere Año Inferior)' print ' Move "1930" to aaaaInferior.' print ' CALL "DecadasABC" USING BY REFERENCE' print ' FECHA6, FECHA8, aaaaInferior' print ""; goto Fin
32767 Fin: end sub
![]()
Otro Código Fuente disponible:
| Cobol (DecadasABC) | Cobol (TestABC) | JavaScript |
![]()