Herramientas de usuario

Herramientas del sitio


notas:cepal2marc

cepal2marc

Script para la migración de la base BINAM de CEPAL a MARC21 (Biblioteca Nacional de Maestros).

/* ------------------------------------------------------------------
 *  Programa para la migraci¢n de la base BINAM de CEPAL a MARC21                   
 * ------------------------------------------------------------------ 
 *  Biblioteca Nacional de Maestros - Abril 2001/Enero 2002
 * ------------------------------------------------------------------ 
 *
 *  Este programa utiliza algunas bases auxiliares (IDIO, PAIS,
 *  ROLES, JURISD, etc.), y los formatos v245c-p.pft, v245c-i.pft,
 *  que generan las menciones de responsabilidad personales e
 *  institucionales respectivamente.
 *
 *  Modo de empleo:
 *      mx g:\ptec\binam\migra\binam proc=@cepal2marc.pft 
 *                                   proc=@elim.pft
 *                                   proc='s'
 *
 *      (en el directorio donde est‚n los archivos auxiliares)
 *
 *   Copiar base nueva en g:\ptec\binam\marc\marc
 * ------------------------------------------------------------------
 */

mpl,

/*  IMPORTANTE: correr el mxf0 y estudiar campos "raros" */

/* eliminamos todos los campos de CEPAL */
'd*',

/* tags de CEPAL que se reutilizan (por si desactivamos la linea previa) */
'd001','d005','d020','d040','d080','d100','d110','d130','d240','d610','d659',


/* =================================================================
 * De acuerdo al nivel del registro (MONOGRAFICO o ANALITICO),
 * seleccionamos los autores (v9016, v9017) y el t¡tulo (v9018) que
 * usaremos en el resto del programa.
 * Aprovechamos para normalizar los espacios alrededor de ':' en
 * los t¡tulos.
 * =================================================================
 */

if v6.1='m' then    /* NIVEL MONOGRAFICO */
  proc(                  
      ,(,'a9016%',v16,'%' ,),
      ,(,'a9017%',v17,'%' ,),
      ,(,'a9018%',replace(replace(v18,' : ',': '),': ',' : '),'%' ,),
      )
else                /* NIVEL ANALITICO */
  proc(
      ,(,'a9016%',v10,'%' ,),
      ,(,'a9017%',v11,'%' ,),
      ,(,'a9018%',replace(replace(v12,' : ',': '),': ',' : '),'%' ,),
      )
fi,

/* testeo de lo anterior */
/*
/'MFN:'mfn/
(|AP-A:|v10/)(|AI-A:|v11/)(|TI-A:|v12/)#
(|AP-M:|v16/)(|AI-M:|v17/)(|TI-M:|v18/)#
(|AP-*:|v9016/)(|AI-*:|v9017/)(|TI-*:|v9018/),
break,
*/


/* =================================================================
 * Determinamos el encabezamiento principal (Main entry), de
 * acuerdo con la tabla de prioridades.
 * =================================================================
 */


/* 7001 : n£mero de autores sin ^f */
proc('a7001%',f(nocc(v9016)-size(v9016^f.1),1,0),'%'),

/* 7000 : encabezamiento principal */
proc('a7000%',
     if p(v130) then '130'
     else if p(v9017) AND p(v240) then '110'
     else if val(v7001)>=1 AND val(v7001)<=3 then '100'
     else if p(v9017) then '110'
     else if p(v53) then '111'
     fi,fi,fi,fi,fi,
     '%',
    ),

/* si ninguna de las condiciones anteriores se cumple, quedan ausentes
   los campos 100, 110, 111 y 130 ("asiento bajo t¡tulo") */

proc('d7001'),

/* ===================================================================
 * Cabecera (leader)
 * (Solo la informaci¢n que est  en BINAM y que depende del registro)
 * ===================================================================
 */

'a999%',
  /* 05 : Record status */
  '?',

  /* 07 : Bibliographic level */
  if v6.1='m' OR p(v18) AND a(v12) then 'm'
     else if v6.1='a' OR p(v12) then 'a' fi,
  fi,

  /* 17 : Encoding level */
  select v05
    case '1':'z',
    case '2':'5',
    case '3':'3',
    case '4':'7',
    case '5':'9',
  endsel,

  /* 19 : Linked record requirement ??? */
  if p(v12) then 'r' else ' ' ,fi,
'%',


/* ===============================================================
 * Campo 001
 * N£mero de control
 * ===============================================================
 */

'a001%',
/* 00-02 */    'BNM'
/* 03-08 */    mfn(6),
'%',

/* =============================================================== 
 * Campo 005 (CEPAL v97)
 * Fecha y hora de la £ltima transacci¢n
 * ===============================================================
 */

'a005%',v97,'000000.0%',

/* =============================================================== 
 * Campo 008 (CEPAL varios)
 * ===============================================================
 */

'a008%',
 /* 00-05 */  if size(v97)=8 then v97*2, else s(date)*2.6 fi,
 /* 06    */  if a(v43) OR v43:'s.f.' then 'n' else 's' fi,
 /* 07-10 */
   /* s.f. */        if a(v43) OR v43:'s.f.' then '    ',
   /* 9999 */        else if not v43:'-' AND NOT v43:'['  then v43,
   /* [ca. 9999] */  else if v43:'ca.' then v43*5.4,
   /* [99--] */      else if v43:'--]' then v43*1.2,'00',
   /* [999-] */      else if v43:'-]' then v43*1.3,'0',
   /* [1111-9999] */ else if v43:'-' then v43*1.4,
   /* [9999] */      else if v43:'[' then v43*1.4,
                     ,fi, fi, fi, fi, fi, fi, fi,
 /* 11-14 */  if v43:'-' AND not v43:'[' then right(v43,4) else '    ' fi,
 /* 15-17 */  if a(v40) then '   ' else '#'v40, fi,
 /* 18-28 */  '|||||||||||',
 /* 29    */  if p(v53) then '1' else '0' fi,
 /* 30-31 */  '00',
 /* 32    */  ' ',         /* posici¢n no definida */
 /* 33    */  '|',
 /* 34    */  if v80:'BIOGRAF' then 'd' else ' ' fi,
 /* 35-37 */  if a(v64)
                then '|||'
                else if nocc(v64)>1
                      then 'mul'
                      else if l(['IDIO']v64) > 0 then
                        ref(['IDIO']l(['IDIO']v64),v2),
                      else,
                        'xxx' /* A REVISAR */
                      fi,
                   ,fi,
             ,fi,
 /* 38 */    '|',
 /* 39 */    '|',
'%',

/* ===============================================================
 * Campo 020 (CEPAL v47)
 * ISBN
 * ===============================================================
 */

if p(v47) then
  ,(,
     'a020%  ^a',v47,'%',
  ,),
fi,


/* ===============================================================
 * Campo 040
 * Biblioteca catalogadora
 * ===============================================================
 */

'a040%  ^aBNM','%',

/* ===============================================================
 * Campo 080 (CEPAL v03)
 * CDU
 * ===============================================================
 */

if p(v03) then
  if l(['DIGITOS']v3.1) > 0 AND NOT v3*1.2='-E'
    then 'a080%',
         '  ^a',mid(v3,1,instr(v03,' ')-1),
         '%',
    else if l(['PREFST']mid(v03,1,instr(v03,' ')-1)) > 0
           then 'a080%',
                '  ^a',
                mid(mid(v03,instr(v03,' ')+1,size(v03)),
                    1,
                    instr(mid(v03,instr(v03,' ')+1,size(v3)),' ')-1
                   ),
                '%',
        ,fi,
 ,fi,
fi,


/* =============================================================== 
 * Campo 100 (CEPAL v10/v16)                                                         
 * Autor personal                                                  
 *
 * Corregir manualmente (luego de migrar): Papas, Santos, Abates,
 *  Kirk-Greene (al v700)
 * ===============================================================
 */

if v7000='100' then

  /* ¨Qu‚ ocurrencia de v9016 va al v100 ? La primera que no posea ^f */

  proc('a7002%',(if v9016^f='' then f(iocc,1,0), break, fi),'%'),

  'a100%',
   ,(,
     if iocc<>val(v7002[1]) then continue else

       if v9016^*:',' then '1' else '0', fi,
       ' ^a', 

       /* ¨M s de una coma? A partir de la segunda se reemplazan por ^c */
       if v9016^*:',' AND mid(v9016^*,instr(v9016^*,',')+2,size(v9016^*)):','
         then mid(v9016^*,1,instr(v9016^*,','))
              replace(mid(v9016^*,instr(v9016^*,',')+1,size(v9016^*)),', ','^c'),
          else v9016^*,
      ,fi,

       replace(v9016,v9016^*,''),

       if v9016^f>'' then
        ,if v9016^f:' y ' then
           ref(['ROLES']l(['ROLES']
               mid(v9016^f,1,instr(v9016^f,' y ')-1)),
               '^e'v2),
           ref(['ROLES']l(['ROLES']
               mid(v9016^f,instr(v9016^f,' y ')+3,1000)),
               '^e'v2),
         else
           ref(['ROLES']l(['ROLES'] v9016^f), '^e'v2),
         fi,
       fi,    
     fi,
   ,),
  '%',
fi,


/* =============================================================== 
 * Campo 110 (CEPAL v11, v17)                                
 * Autor institucional                                             
 *                                                                 
 * Actualizar la base JURISD al momento de la migracion            
 * ===============================================================
 */

if v7000='110' then
 'a110%',
    if v9017[1]:'^b' AND l(['JURISD']v9017^*[1]) > 0
      then '1',
      else '2',
   ,fi,
    ' ',
   '^a',v9017[1],
 '%',
fi,


/* =============================================================== 
 * Campo 111 (CEPAL v53, v54, v55, v56)                                           
 * Conferencia                                                     
 * =============================================================== 
 */

if v7000='111' then
  'a111%  ^a',
  if v53:', ' AND
    l(['DIGITOS']mid(v53,instr(v53,', ')+2,1)) > 0 then
    replace(v53,', ','^n'),   /* numero */
  else
  if v53:'. ' AND
    l(['DIGITOS']mid(v53,instr(v53,'. ')+2,1)) > 0 then
    replace(v53,'. ','^n'),   /* numero */
  else v53,
  fi,fi,

  /* lugar (ciudad, pais) */
  if p(v54) OR p(v55) then '^c',
    v54,
    if p(v55) then ', ',ref(['PAIS']l(['PAIS']v55),v3), fi,
  fi,

  /* fecha */
  if p(v56) then  v56, fi,

  '%',
fi,
 

/*===============================================================
 * Campo 130 (ya migrado manualmente a v130)                                           
 * T¡tulo uniforme                                                 
 * ===============================================================
 */

if v7000='130' then
   'a130%  ^a',v130,'%',
fi,


 /*===============================================================
 * Campo 240 (ya migrado manualmente a v240)                                           
 * T¡tulo uniforme                                                 
 * ===============================================================
 */

if p(v240) then
 ,(,
    'a240%  ^a',v240,'%',
 ,),
fi,


/* =============================================================== 
 * Campo 245 (CEPAL v10, v11, v12, v16, v17, v18)                  
 * T¡tulo y menci¢n de responsabilidad                             
 *
 *      ^n, ^p:
 *      Ej: En busca del tiempo perdido. 5: la prisionera --> ^n5^pla prisionera
 *       Buscar: 
 *      /[Tomo|Tome|T[.|:]|Parte|Part|P[.|:]|Volumen|Vol|V[.|:]|Secci[o|¢]n|Section] ?[\d|I|V|X|L|C]/i
 *
 *      Candidatos al v111: 
 *      /[conf.r.nc|sal.n|congr.s|jornada|reuni.n|simposio|encuentro|taller|workshop|]/
 * ===============================================================
 */

if p(v9018) then

'a245%00^a',

  /* ******* SUSPENDIDO POR EL MOMENTO EL USO DE ^n ******* */

  /* v1201 : primera posicion donde aparece '. '+digito */
/*
  if v9018[1]:'. 0' then proc('a1200%',f(instr(v9018[1],'. 0'),1,0),'%'), fi,
  if v9018[1]:'. 1' then proc('a1200%',f(instr(v9018[1],'. 1'),1,0),'%'), fi,
  if v9018[1]:'. 2' then proc('a1200%',f(instr(v9018[1],'. 2'),1,0),'%'), fi,
  if v9018[1]:'. 3' then proc('a1200%',f(instr(v9018[1],'. 3'),1,0),'%'), fi,
  if v9018[1]:'. 4' then proc('a1200%',f(instr(v9018[1],'. 4'),1,0),'%'), fi,
  if v9018[1]:'. 5' then proc('a1200%',f(instr(v9018[1],'. 5'),1,0),'%'), fi,
  if v9018[1]:'. 6' then proc('a1200%',f(instr(v9018[1],'. 6'),1,0),'%'), fi,
  if v9018[1]:'. 7' then proc('a1200%',f(instr(v9018[1],'. 7'),1,0),'%'), fi,
  if v9018[1]:'. 8' then proc('a1200%',f(instr(v9018[1],'. 8'),1,0),'%'), fi,
  if v9018[1]:'. 9' then proc('a1200%',f(instr(v9018[1],'. 9'),1,0),'%'), fi,
*/
  /* regeneramos el v9018, colocando '^n' */
  /*
  if p(v1200) then
    proc('a1201%',f(rmin(v1200+| |),1,0),'%'),
    proc('d9018',
         'a9018%',mid(v9018[1],1,val(v1201)-1), '^n', mid(v9018[1],val(v1201)+2,size(v9018[1])), '%',
         (, if iocc=1 then continue else 'a9018%',v9018,'%' fi ,),
        ),
    proc('d1200','d1201'),
  fi,
  */

  /* v1202 : primera posicion donde aparece un ':' o un '=' */

  ,if v9018[1]:':' then
    proc('a1200%',f(instr(v9018[1],':'),1,0),'%'),   /* pos. del 1er ':' */
  fi,

  ,if v9018[1]:'=' then
    proc('a1201%',f(instr(v9018[1],'='),1,0),'%'),   /* pos. del 1er '=' */
  fi,

  proc('a1202%',f(rmin(v1200,x1,v1201),1,0),'%'), /* pos. del primero de ambos */

  /* colocamos '^b' en la posici¢n indicada por v1202 (el signo '=' se conserva) */

  if v1202=v1201 then mid(v9018[1],1,val(v1202)-1), else mid(v9018[1],1,val(v1202)-2), fi,
  if s(v1200,v1201)>'' then
    '^b', mid(v9018[1], val(v1202)+2, size(v9018[1])),
   else v9018[1],
  fi,

  /* y si hay m s de un t¡tulo... */

  if nocc(v9018)>1 then
    ' ;',
    if val(v1202)=0 then '^b' else ' ', fi,
    ,(, if iocc>1 then v9018+| ; |, else continue fi ,),
  fi,

  proc('d1200','d1201','d1202'),

  /* ========== MENCIONES DE RESPONSABILIDAD ========== */

  /*
	if s(v9016,v9017) > '' AND
   ( a(v130) AND a(v240)
    OR a(v130) AND p(v240) AND nocc(v9017) > 1
    OR a(v130) AND p(v240) AND p(v9016) ) then
    '^c',
    if p(v9016) then ,@v245c-p.pft, fi,
    if p(v9017) AND a(v240)  OR p(v240) AND nocc(v9017) > 1 then
      ,if p(v9016) then ' ; ', fi,
      ,@v245c-i.pft,
    fi,
  fi,
	*/

	          /* Begin porcion extraida de la version de nov/01 */
            if p(v16) or p(v17) then ' /^c[' ,fi

            if p(v16)
              then (
                    if iocc>1
                      then ', ',
                    fi,
                    if v16^*:', '
                      then mid(v16^*,instr(v16^*,', ')+2,size(v16^*)),
                           ' ',
                           mid(v16^*,1,instr(v16^*,', ')-1),
                     ,else v16^*,
                    fi,
                    /*
                    if p(v16^f)
                      then ', ', ref(['ROLES']l(['ROLES']v16^f),v2),
                    fi,
                    */
                   ),
            fi,

            if p(v17) and a(v16)
              then (
                    if iocc>1
                      then ', ',
                    fi,
                    v17^*,
                   ),
           ,fi,
            if p(v16) or p(v17) then ']' ,fi
					 /* End porcion de nov/01 */

'%',
fi,    /* p(v9018) */

/* =============================================================== 
 * Campo 250 (CEPAL v41)
 * Edici¢n
 * ===============================================================
 */

if p(v41) then
  'a250%  ^a',v41,'%',
fi,

/* =============================================================== 
 * Campo 260 (CEPAL v39, v38, v43)
 * Publicaci¢n: Lugar, editor y fecha
 * ===============================================================
 */

 /* Revisar luego el archivo 260efg.txt */

if v6.1='m' OR a(v12) AND p(v18) then

'a260%  ',
  if s(v39,v38)='[S.l.][s.n.]' OR s(v39,v38)='' then '^a[S.l.^bs.n.]' 
   else
    if a(v39) then '^a[S.l.]',
      else
        if nocc(v38)=1 AND v38:'^f' AND nocc(v39)=1 then '^e', v39,
        else
         if nocc(v39)=1 OR nocc(v38) > 1 then |^a|v39,  /* quedan todas */
         else
           /* Varios lugares & una editorial:
            *  Si Bs. As. es la 1ra occ --> queda s¢lo Bs.As. 
            *  Si Bs. As. est  en otra occ --> queda la 1ra + Bs. As. y nada m s 
            *  Si Bs. As. est  ausente --> queda s¢lo la 1ra. 
            *
            */
          
           if not v39:'Buenos Aires' or v39[1]:'Buenos Aires' then '^a',v39[1]
           else                  
             '^a',v39[1],
             ,(,
               if v39:'Buenos Aires' then '^a',v39, break, fi,
             ,),
           fi,
         fi,
        fi,
    fi,

    if a(v38) then '^b[s.n.]',
      else ,(, if v38^f='' then '^b' fi, v38 ,),
    fi,

  fi,


  if nocc(v38)=1 AND v38:'^f' then '^g' else '^c', fi,
  if a(v43) then '[s.f.]' else v43 fi,
'%',

fi,

/* =============================================================== 
 * Campo 300 (CEPAL v14, v20, v42)
 * P ginas y descripci¢n f¡sica
 * ===============================================================
 */

if p(v20) or p(v14) or p(v42) then
  'a300%  ',
    if p(v14)
      then '^a',v14,
      else if p(v20) then '^a',v20, fi,
    fi,

    if p(v42) then
      if v42.1<>'+' then '^b', fi,
      replace(replace(v42,' + ','^e'),'+ ','^e'),
   ,fi,
  '%',
fi,

/* ===============================================================
 * Campo 440 (CEPAL v21, v25, v30, v32)
 * Colecci¢n/serie: t¡tulo, subt¡tulo, volumen
 *
 * ¨¨¨ v30, v32 ???
 * ===============================================================
 */

/* atencion: estamos suponiendo que nocc(v25)=nocc(v21), pero p.ej. en
   104169, 107697, esto no ocurre */

if p(v25) then
  (,
    'a440% 0',
    '^a',replace(v25,'^s','^p'),
    if p(v21) then '^v',v21, fi,
    '%',
  ),
fi,

if p(v30) then
  (,
    'a440% 0',
    '^a',replace(v30,'^s','^p'),
    if p(v32) then '^v',v32, fi,
    '%',
  ),
fi,


/* ===============================================================
 * Campos 500, 504 (CEPAL v68)
 * Nota general, nota de bibliograf¡a
 * ===============================================================
 */

if p(v68) then
  (,
    if v68:'ibliograf' then 'a504' else 'a500' fi, '%  ^a',v68,'%',
  ),
fi,

/* ===============================================================
 * Campo 521 (CEPAL v81)
 * Nivel de audiencia
 *
 * Los subcampos de v81 deben desaparecer?
 * ===============================================================
 */

if p(v81) then
  ,(,
     'a521%  ^a',v81,'%',
  ,),
fi,


/* =============================================================== 
 * Campo 530 (CEPAL v95)
 * Digitalizaci¢n
 * ===============================================================
 */

if p(v95) then
  'a530%  ^a',v95,'%',
fi,


/* ===============================================================
 * Campo 536 (CEPAL v52)
 * Nota de patrocinador
/* =============================================================== 

if p(v52) then
  ,(,
     'a536%  ^a',replace(v52,'^b','. '),'%',
  ,),
fi


/* ===============================================================
 * Campo 600 (Cepal v99)
 * Nombres personales como identificadores
 * ===============================================================
 */

if p(v99) then
  ,(,
     'a600%',
      if v99^*:',' then '1' else '0', fi,
      ' ^a',v99,
     '%',
  ,),
fi,


/* ===============================================================
 * Campo 610
 * Nombres institucionales como identificadores
 * ===============================================================
 */

if p(v610) then
  (,
    'a610%',
     if v610:'^b' AND l(['JURISD']v610^*) > 0
       then '1'
       else '2'
    ,fi,
    ' ^a',v610,'%',
  ),
fi,


/* ===============================================================
 * Campo 650 (CEPAL v76)
 * Descriptores
 * ===============================================================
 */

if p(v76) then
 ,(,
    'a650%',
    if NOT p(v76^p)
      then ' 4^a',v76^*,
      else '  ^9',v76^p,
    fi,
    '%',
 ,),
fi,


/* ===============================================================
 * Campo 659 (CEPAL v80, ya migrado a v659)
 * Categor¡a tem tica (Cat logo)
 * ===============================================================
 */

if p(v659) then ,(, 'a659%',' ',' ',v659,'%' ,), fi,


/* ===============================================================
 * Campo 700 (CEPAL v10, v16)
 * Entrada secundaria: Autor personal
 * ===============================================================
 */

if p(v9016) then
 ,(,

   if iocc=val(v7002[1]) then continue, else 

   'a700%',
      if v9016^*:',' then '1' else '0' fi,
      ' ^a',
      /* ¨hay doble coma? ponemos ^c en el lugar de la segunda */
      if v9016^*:',' AND mid(v9016^*,instr(v9016^*,',')+2,size(v9016^*)):','
        then mid(v9016^*,1,instr(v9016^*,','))
             replace(mid(v9016^*,instr(v9016^*,',')+1,size(v9016^*)),', ','^c'),
         else v9016^*,
     ,fi,

     replace(replace(v9016,v9016^*,''),s('^f',v9016^f),''),

   /* ATENCION: ESTA PORCION DE CODIGO HACE QUE EL GRUPO REPETIBLE SE
    * EJECUTE AL MENOS DOS VECES, AUN CUANDO SOLO HAY UNA OCC DEL CAMPO
    * 9016. PARA ELIMINAR LOS CAMPOS 700 VACIOS QUE SE CREAN POR ESTE
    * PROBLEMA, AGREGAMOS "proc=(if v700^a='' then 'd700/'f(iocc,1,0), fi)"
    */
    if v9016^f>'' then
     ,if v9016^f:' y ' then
        ref(['ROLES']l(['ROLES']
            mid(v9016^f,1,instr(v9016^f,' y ')-1)),
            '^e'v2),
        ref(['ROLES']l(['ROLES']
            mid(v9016^f,instr(v9016^f,' y ')+3,1000)),
            '^e'v2),
      else
        ref(['ROLES']l(['ROLES'] v9016^f), '^e'v2),
      fi,
    fi,    
   '%',
  ,fi,
 ,),
,fi,


/* ===============================================================
 * Campo 710 (CEPAL v11, v17)
 * Entrada secundaria: Autor institucional
 * ===============================================================
 */


if p(v9017) then
 ,(,

   if iocc>1 OR v7000[1]<>'110' then

    'a710%',
     if v9017:'^b' AND l(['JURISD']v9017^*) > 0
       then '1',
       else '2',
    ,fi,
    ' ^a',v9017,
    '%',
  ,fi,
   ),
,fi,


/* =============================================================== 
 * Campo 711 (CEPAL v53, v54, v55, v56)                                           
 * Entrada secundaria: Conferencia                                                     
 * =============================================================== 
 */

  if p(v53) AND v7000<>'111' then
      'a711%  ^a',
      if v53:', ' AND
        l(['DIGITOS']mid(v53,instr(v53,', ')+2,1))>0 then
        replace(v53,', ','^n'),   /* numero */
      else v53,
      fi,

      /* lugar (ciudad, pais) */  if p(v54) OR p(v55) then '^c',v54,", "v55, fi,
      /* fecha */  if p(v56) then  v56, fi,

      '%',
  fi,


/* ===============================================================
 * Campo 800 (CEPAL v23)
 * Autor personal - Colecci¢n
 * ===============================================================
 */

if p(v23) then
  ,(,
    'a800%',
      if v23^*:',' then '1' else '0' fi,
      ' ^a',v23^*,

      replace(replace(v23,v23^*,''),s('^f',v23^f),''),

      if v23^f>'' then
       ,if v23^f:' y ' then
          ref(['ROLES']l(['ROLES']
              mid(v23^f,1,instr(v23^f,' y ')-1)),
              '^e'v2),
          ref(['ROLES']l(['ROLES']
              mid(v23^f,instr(v23^f,' y ')+3,1000)),
              '^e'v2),
        else
          ref(['ROLES']l(['ROLES'] v23^f), '^e'v2),
        fi,
      fi,    
    '%',
  ,),
fi,

/* ===============================================================
 * Campo 810 (CEPAL v24)
 * Autor institucional - Colecci¢n
 * ===============================================================
 */

if p(v24) then
 ,(,
    'a810%',
      if v24:'^b' AND l(['JURISD']v24^*) > 0
        then '1',
        else '2',
     ,fi,
      ' ^a',replace(v24,'^f','^e'),
    '%',
 ,),
fi,


/* =============================================================== 
 * Campo 845 (CEPAL v62)
 * Disponibilidad
 *
 * Ver listado con los valores presentes en el campo 62 (hay rarezas)
 * ===============================================================
 */

if v62='P' OR v62='S' then
  'a845%  ^a',v62,'%',
fi,


/* ===============================================================
 * Campo 859 (CEPAL v02, v03, v62, v120)
 * Datos de cada ejemplar: inventario, volumen, ubicacion, estado,
 * donaci¢n, disponibilidad.
 *
 * ¨ Ad¢nde van las ocurrencias adicionales de v3 ?
 * ===============================================================
 */

if p(v02) then    /* una ocurrencia de v859 por cada ejemplar */
  (
   'a859%',
   '  ',
   '^a',v02^*,               /* inventario */
   if p(v02^a)
     then '^c',v02^a,        /* volumen */
   fi,
   if p(v02^b) OR v03[1]>''
     then '^b',
     if p(v02^b) then v02^b else v03[1], fi,  /* ubicacion */
   fi,
   if p(v02^c)
     then '^k',v02^c,        /* estado */
   fi,
   if p(v02^d) OR v120[1]>''
     then '^g',
     if p(v02^d) then v02^d else v120[1] fi,  /* donacion */
   fi,
   if v62[1]>'' then '^d',v62[1], fi,   /* disponibilidad */

   /* nuevos subcampos : l,m,n */
   if v03:' ' AND l(['PREFCDU']mid(v3,1,instr(v3,' ')-1)) > 0
     then '^l', mid(v3, 1, instr(v3,' ')-1),
          '^m', mid(v3, instr(v3,' ')+1, instr(mid(v3,instr(v3,' ')+1,size(v3)),' ')-1)
          '^n', mid(v3, instr(mid(v3,instr(v3,' ')+1,size(v3)),' ')+1, size(v3))
     else if l(['DIGITOS']v3.1) > 0
       then '^m', mid(v3, 1, instr(v3,' ')-1),
            '^n', mid(v3,instr(v3,' ')+1,size(v3)),
       else '^l',v3,
   fi,fi,

   '%',
  ),
fi,


/* =============================================================== 
 * Campo 959 (CEPAL v91, v97)
 * Catalogador, fecha de catalogaci¢n.
 *
 * ¨Con qu‚ ocurrencia del v91 asociamos el v97? Con la ultima.
 * ===============================================================
 */

if p(v91) OR p(v97) then
  (
   'a959%  ',
   '^e',v91,                                       /* catalogador */
   if p(v97) AND iocc=nocc(v91) then '^f',v97 fi,  /* fecha de catalogaci¢n */
   '%',
  ),
fi,

/* ===============================================================
 * Campo 960 (Notas internas [ex-Marcas])
 * ===============================================================
 */

 if p(v102) then
   ,(,
      'a960%  ^i',v102,'%',
   ,),
 fi,


/* ===============================================================
 * Campo 900
 * MFN al momento de la migraci¢n (link con el backup de CEPAL)
 * ===============================================================
 */

'a900%',mfn(6),'%',

/*break,*/

/* ===============================================================
 * Campo 901
 * LINK a MONOGRAFIA (para ANALITICAS)
 * ===============================================================
 */

if v6.1='a' OR p(v12) then
  'a901%',
    if l(['g:\ptec\binam\migra\binam']'ST='v3[1]'~M')=0
       OR v3[1]:'NO DISPONIBLE' then '!MONOGRAFIA NO ENCONTRADA',
    else
     ref(['g:\ptec\binam\migra\binam']l(['g:\ptec\binam\migra\binam']'ST='v3[1]'~M'),mfn(6)),
    fi,
  '%',
fi,


/* ============================= THE END ============================= */

migracion marc cepal

notas/cepal2marc.txt · Última modificación: por 127.0.0.1