Método de las Décadas ABC

Código fuente DEC Basic 'DecadasABC.BAS'
  1. Seleccione con el mouse el texto disponible más abajo entre las dos líneas rojas.

  2. Mediante las opciones de Copiar y Pegar llévelo al Block de Notas y grábelo en su disco duro como DecadasABC.bas

  3. Transfiéralo al host mediante cualquier software de transferencia de archivos.

  4. El el host realice las siguientes instrucciones:

    1. BASIC DecadasABC ----------------// Compilación de subprograma (Se genera DecadasABC.obj)

    2. COBOL TestABC--------------------// Compilación de programa llamador (Se genera TestABC.obj)

    3. LINK TestABC,DecadasABC--------// Generación de imagen ejecutable (TestABC.exe)

    4. 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 |

Volver a Página Principal