This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
eliminacion_de_subcampos [17/06/2009 16:25] fernando |
eliminacion_de_subcampos [19/06/2009 19:00] fernando |
||
---|---|---|---|
Line 3: | Line 3: | ||
Este es un "truco" que de vez en cuando necesitamos tener a mano. | Este es un "truco" que de vez en cuando necesitamos tener a mano. | ||
- | El problema es: eliminar el subcampo f del campo 333. | + | El problema en términos generales es: **eliminar un subcampo X de un campo Y**. |
+ | Vamos a hacer algunas suposiciones: | ||
+ | |||
+ | * Digamos que nos interesa eliminar el subcampo **f** del campo **333**, por poner un ejemplo arbitrario. | ||
+ | * Supondremos que ni el campo 333 ni el subcampo f son repetibles. (Sí, nos conformamos con el caso fácil. Pero es bienvenida una solución más general) | ||
===== La solución ===== | ===== La solución ===== | ||
<code> | <code> | ||
- | mx base "proc=@borra.pft" | + | mx base "proc=@borra333f.pft" |
</code> | </code> | ||
- | donde ''borra.pft'' es un archivo con el siguiente contenido: | + | donde ''borra333f.pft'' es un archivo con el siguiente contenido: |
<code> | <code> | ||
Line 21: | Line 25: | ||
'</333>', | '</333>', | ||
fi | 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 ,@borra333f.pft, fi" | ||
</code> | </code> | ||
Line 28: | Line 38: | ||
<code> | <code> | ||
- | proc='d980' | + | proc='d333' |
</code> | </code> | ||
Line 35: | Line 45: | ||
<code> | <code> | ||
'd333', | 'd333', | ||
- | 'a333~', | + | '<333>', |
replace(v333, s('^f',v333^f), ''), | replace(v333, s('^f',v333^f), ''), | ||
- | '~', | + | '</333>', |
</code> | </code> | ||
Line 45: | Line 55: | ||
'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 forma, 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> | + | |
- | 'd333', | + | |
- | if replace(v333, s('^f',v333^f), '') : '^' then | + | |
- | 'a333~', | + | |
- | replace(v333, s('^f',v333^f), ''), | + | |
- | '~', | + | |
- | fi | + | |
- | </code> | + | |
- | + | ||
- | Por supuesto, es aplicable la advertencia usual con respecto al uso de un proc para crear campos: el delimitador (en el ejemplo, '~') no debe estar contenido en los datos. Esta limitación ya no existe en la versión más reciente de los cisis, donde se puede usar esta sintaxis alternativa (ver [[http://bvsmodelo.bvsalud.org/download/cisis/CISIS-ManualReferencia-es-5.2.pdf]]): | + | |
<code> | <code> | ||
Line 72: | Line 71: | ||
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}} |