This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
eliminacion_de_subcampos [19/06/2009 19:00] fernando |
eliminacion_de_subcampos [19/06/2009 00:00] (current) |
||
---|---|---|---|
Line 7: | Line 7: | ||
Vamos a hacer algunas suposiciones: | Vamos a hacer algunas suposiciones: | ||
- | * Digamos que nos interesa eliminar el subcampo **f** del campo **333**, por poner un ejemplo arbitrario. | + | * Digamos que nos interesa eliminar el subcampo **f** del campo **123**, 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) | + | * 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=@borra333f.pft" | + | mx base "proc=@borra123f.pft" |
</code> | </code> | ||
- | donde ''borra333f.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> | </code> | ||
Line 30: | Line 30: | ||
<code> | <code> | ||
- | mx base "proc=if <condición> then ,@borra333f.pft, fi" | + | mx base "proc=if <condición> then ,@borra123f.pft, fi" |
</code> | </code> | ||
Line 38: | Line 38: | ||
<code> | <code> | ||
- | proc='d333' | + | proc='d123' |
</code> | </code> | ||
Line 44: | 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> | ||
Line 64: | Line 64: | ||
<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> |