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
eliminacion_de_subcampos [17/06/2009 16:01]
fernando creado
eliminacion_de_subcampos [19/06/2009 00:00] (current)
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 **123**, por poner un ejemplo arbitrario. 
 +  * Supondremos que ni el campo 123 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=@borra123f.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 ''​borra123f.pft''​ es un archivo con el siguiente contenido:
  
 <​code>​ <​code>​
-'d333', +'d123', 
-'a333~', +if replace(v123,​ s('^f',v123^f), ''​) : '​^'​ then 
-    replace(v333, s('​^f',​v333^f), ''​),​ +    ​'<​123>',​ 
-'~',+       replace(v123, s('​^f',​v123^f), ''​),​ 
 +    '</​123>​', 
 +fi
 </​code>​ </​code>​
  
-Tenemos un problema: ​en caso de que el único contenido del campo 333 sea el subcampo fal volver a crearlo sin ese subcampo nos habremos quedado con un campo 333 vacío. Para evitar eso, antes de proceder a re-crear el campo verifiquemos que contiene ​algo más que el subcampo que deseamos eliminar:+Si solamente nos interesa borrar ese subcampo ​en registros ​que cumplan cierta condiciónusaremos ​algo como:
  
 <​code>​ <​code>​
-'d333', +mx base "​proc=if <​condición>​ then ,​@borra123f.pft,​ fi" 
-if replace(v333, s('​^f',​v333^f), ''​) <> ''​ then +</​code>​ 
-    'a333~', + 
-       ​replace(v333, s('​^f',​v333^f), ''​),​ +===== La explicación ===== 
-    '~',+ 
 +Queremos eliminar un subcampo específico,​ pero usando un ''​proc''​ sólo podemos eliminar campos completos:​ 
 + 
 +<​code>​ 
 +proc='​d123'​ 
 +</​code>​ 
 + 
 +Ya que tenemos una forma de eliminar el campo completo, hagamos eso y luego volvamos a crear el campo, pero modificado:​ 
 + 
 +<​code>​ 
 +'​d123',​ 
 +'<​123>',​ 
 +    replace(v123,​ s('​^f',​v123^f),​ ''​),​ 
 +'</​123>',​ 
 +</​code>​ 
 + 
 +Tenemos un problema: en caso de que el único contenido del campo 123 sea el subcampo f, al volver a crearlo sin ese subcampo nos habremos quedado con un campo 123 vacío. Para evitar eso, antes de proceder a re-crear el campo verifiquemos que contiene algo más que el subcampo que deseamos eliminar: 
 + 
 +<​code>​ 
 +'d123', 
 +if replace(v123, s('​^f',​v123^f), ''​) <> ''​ then 
 +    '<123>', 
 +       ​replace(v123, s('​^f',​v123^f), ''​),​ 
 +    '</​123>​',
 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', +'d123', 
-if replace(v333, s('​^f',​v333^f), ''​) : '​^'​ then +if replace(v123, s('​^f',​v123^f), ''​) : '​^'​ then 
-    'a333~', +    '<123>', 
-       ​replace(v333, s('​^f',​v333^f), ''​),​ +       ​replace(v123, s('​^f',​v123^f), ''​),​ 
-    '~',+    '</​123>​',
 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.1245265309.txt.gz · Last modified: 17/06/2009 00:00 (external edit)