User Tools

Site Tools


eliminacion_de_subcampos

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
eliminacion_de_subcampos [17/06/2009 16:27]
fernando
eliminacion_de_subcampos [19/06/2009 19:01]
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 **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 ===== ===== La solución =====
  
 <​code>​ <​code>​
-mx base "​proc=@borra.pft"+mx base "​proc=@borra123f.pft"
 </​code>​ </​code>​
  
-donde ''​borra.pft''​ es un archivo con el siguiente contenido:+donde ''​borra123f.pft''​ es un archivo con el siguiente contenido:
  
 <​code>​ <​code>​
-'d333', +'d123', 
-if replace(v333, s('​^f',​v333^f), ''​) : '​^'​ then +if replace(v123, s('​^f',​v123^f), ''​) : '​^'​ then 
-    '<333>',​ +    '<123>',​ 
-       ​replace(v333, s('​^f',​v333^f), ''​),​ +       ​replace(v123, s('​^f',​v123^f), ''​),​ 
-    '</333>',+    '</123>',
 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 ,​@borra123f.pft,​ fi"
 </​code>​ </​code>​
  
Line 28: Line 38:
  
 <​code>​ <​code>​
-proc='d980'+proc='d123'
 </​code>​ </​code>​
  
Line 34: Line 44:
  
 <​code>​ <​code>​
-'d333', +'d123', 
-'<333>',​ +'<123>',​ 
-    replace(v333, s('​^f',​v333^f), ''​),​ +    replace(v123, s('​^f',​v123^f), ''​),​ 
-'</333>',+'</123>',
 </​code>​ </​code>​
  
-Tenemos un problema: en caso de que el único contenido del campo 333 sea el subcampo f, al 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:+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>​ <​code>​
-'d333', +'d123', 
-if replace(v333, s('​^f',​v333^f), ''​) <> ''​ then +if replace(v123, s('​^f',​v123^f), ''​) <> ''​ then 
-    '<333>',​ +    '<123>',​ 
-       ​replace(v333, s('​^f',​v333^f), ''​),​ +       ​replace(v123, s('​^f',​v123^f), ''​),​ 
-    '</333>',+    '</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 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>​ <​code>​
-'d333', +'d123', 
-if replace(v333, s('​^f',​v333^f), ''​) : '​^'​ then +if replace(v123, s('​^f',​v123^f), ''​) : '​^'​ then 
-    '<333>',​ +    '<123>',​ 
-       ​replace(v333, s('​^f',​v333^f), ''​),​ +       ​replace(v123, s('​^f',​v123^f), ''​),​ 
-    '</333>',+    '</123>',
 fi fi
 </​code>​ </​code>​
Line 65: Line 75:
 ===== Referencias ===== ===== Referencias =====
  
-[[http://​bvsmodelo.bvsalud.org/​download/​cisis/​CISIS-ManualReferencia-es-5.2.pdf|Manual de Referencia ​de los Utilitarios CISIS]] (PDF).+[[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)