User Tools

Site Tools


eliminacion_de_subcampos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
eliminacion_de_subcampos [17/06/2009 16:01]
fernando creado
eliminacion_de_subcampos [19/06/2009 19:00]
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 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 =====
  
 <​code>​ <​code>​
-proc='​d980'​+mx base "proc=@borra333f.pft"​
 </​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:+donde ''​borra333f.pft''​ es un archivo con el siguiente contenido:
  
 <​code>​ <​code>​
 '​d333',​ '​d333',​
-'a333~',+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 ,​@borra333f.pft,​ fi" 
 +</​code>​ 
 + 
 +===== La explicación ===== 
 + 
 +Queremos eliminar un subcampo específico,​ pero usando un ''​proc''​ sólo podemos eliminar campos completos:​ 
 + 
 +<​code>​ 
 +proc='​d333'​ 
 +</​code>​ 
 + 
 +Ya que tenemos una forma de eliminar el campo completo, hagamos eso y luego volvamos a crear el campo, pero modificado:​ 
 + 
 +<​code>​ 
 +'​d333',​ 
 +'<​333>​',
     replace(v333,​ s('​^f',​v333^f),​ ''​),​     replace(v333,​ s('​^f',​v333^f),​ ''​),​
-'~',+'</​333>​',
 </​code>​ </​code>​
  
Line 23: 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 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 formasó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}}
eliminacion_de_subcampos.txt · Last modified: 19/06/2009 00:00 (external edit)