This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
eliminacion_de_subcampos [17/06/2009 16:01] fernando creado |
eliminacion_de_subcampos [17/06/2009 16:33] fernando |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Eliminación de subcampos en registros isis ====== | ====== Eliminación de subcampos en registros isis ====== | ||
- | Un "truco" que de vez en cuando necesitamos tener a mano. | + | Este es un "truco" que de vez en cuando necesitamos tener a mano. |
- | Queremos eliminar un subcampo específico, pero usando un ''proc'' sólo podemos eliminar fácilmente campos completos: | + | El problema es: eliminar el subcampo f del campo 333. |
+ | |||
+ | |||
+ | ===== La solución ===== | ||
+ | |||
+ | <code> | ||
+ | mx base "proc=@borra.pft" | ||
+ | </code> | ||
+ | |||
+ | donde ''borra.pft'' es un archivo con el siguiente contenido: | ||
+ | |||
+ | <code> | ||
+ | 'd333', | ||
+ | if replace(v333, s('^f',v333^f), '') : '^' then | ||
+ | '<333>', | ||
+ | replace(v333, s('^f',v333^f), ''), | ||
+ | '</333>', | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | Si solamente nos interesa borrar ese subcampo en registros que cumplan cierta condición, usaremos algo como: | ||
+ | |||
+ | <code> | ||
+ | mx base "proc=if <condición> then ,@borra.pft, fi" | ||
+ | </code> | ||
+ | |||
+ | ===== La explicación ===== | ||
+ | |||
+ | Queremos eliminar un subcampo específico, pero usando un ''proc'' sólo podemos eliminar campos completos: | ||
<code> | <code> | ||
Line 9: | Line 37: | ||
</code> | </code> | ||
- | Supongamos que queremos eliminar del campo 333 solamente el subcampo **f**. Ya que tenemos una forma de eliminar el campo completo, hagamos eso y luego volvamos a crear el campo, modificándolo: | + | Ya que tenemos una forma de eliminar el campo completo, hagamos eso y luego volvamos a crear el campo, pero modificado: |
<code> | <code> | ||
'd333', | 'd333', | ||
- | 'a333~', | + | '<333>', |
replace(v333, s('^f',v333^f), ''), | replace(v333, s('^f',v333^f), ''), | ||
- | '~', | + | '</333>', |
</code> | </code> | ||
Line 23: | Line 51: | ||
'd333', | 'd333', | ||
if replace(v333, s('^f',v333^f), '') <> '' then | if replace(v333, s('^f',v333^f), '') <> '' then | ||
- | 'a333~', | + | '<333>', |
replace(v333, s('^f',v333^f), ''), | replace(v333, s('^f',v333^f), ''), | ||
- | '~', | + | '</333>', |
fi | fi | ||
</code> | </code> | ||
- | Sin embargo, al preguntar si el campo quedaría vacío luego de eliminar el subcampo no estamos detectando el caso de un campo MARC con indicadores. En tal caso, el campo se puede considerar vacío si sólo tiene indicadores. Por lo tanto, nuestra de definición de "campo vacío" es: campo sin subcampos. Dicho de otra foram, nos interesa re-crear el campo si aún contiene algún subcampo, y eso lo podemos detectar mediante la presencia del carácter '^': | + | Sin embargo, al preguntar si el campo quedaría vacío luego de eliminar el subcampo no estamos detectando el caso de un campo MARC con indicadores. Si nos quedásemos con un campo que sólo contiene indicadores, también deberíamos considerar que se trata de un campo vacío. Por lo tanto, nuestra de definición de //campo vacío// es: un campo sin subcampos. Dicho de otra forma, sólo nos interesa re-crear el campo si es que aún contiene algún subcampo, y eso lo podemos detectar mediante la presencia del carácter '^': |
<code> | <code> | ||
'd333', | 'd333', | ||
if replace(v333, s('^f',v333^f), '') : '^' then | if replace(v333, s('^f',v333^f), '') : '^' then | ||
- | 'a333~', | + | '<333>', |
replace(v333, s('^f',v333^f), ''), | replace(v333, s('^f',v333^f), ''), | ||
- | '~', | + | '</333>', |
fi | fi | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ===== Referencias ===== | ||
+ | |||
+ | [[http://bvsmodelo.bvsalud.org/download/cisis/CISIS-ManualReferencia-es-5.2.pdf|Utilitarios CISIS - Manual de Referencia (Versión 5.2)]] (PDF). | ||
{{tag>isis}} | {{tag>isis}} |