Difference between revisions of "Lenguaje de formatos"

From ABCD Wiki
Jump to: navigation, search
Line 54: Line 54:
  
 
==Literales==  
 
==Literales==  
Como ya mencionamos en la sección Estructuras CDS/Isis, estas bases de datos están orientadas a almacenar información cuyo mayor componente sea texto, a través de registros de longitud variable. Este tipo de información generalmente se presenta en forma de párrafo y muy pocas veces en reportes columnares. Al formar párrafos debemos utilizar signos de puntuación para separar los elementos de datos. Por ello, el lenguaje de formatos del CDS/Isis está orientado hacia la formación de párrafos con la inclusión de rótulos, signos de puntuación y otros elementos de edición para la separación de los campos del registro.
+
Como ya mencionamos en la sección Estructuras CDS/Isis, estas bases de datos están orientadas a almacenar información cuyo mayor componente sea texto, a través de registros de longitud variable. Este tipo de información generalmente se presenta en forma de párrafo y muy pocas veces en reportes columnares. Al formar párrafos debemos utilizar signos de puntuación para separar los elementos de datos. Por ello, el lenguaje de formatos del CDS/Isis está orientado hacia la formación de párrafos con la inclusión de rótulos, signos de puntuación y otros elementos de edición para la separación de los campos del registro.
Los elementos de separación generalmente toman la forma de literales. Entonces, podemos definir un literal como un caracter o cadena de caracteres que precede (pre-literal) o continúa (post-literal) a un campo para darle legibiidad a la información presentada.
+
 
Existen varios tipos de literales:
+
Los elementos de separación generalmente toman la forma de literales. Entonces, podemos definir un literal como un caracter o cadena de caracteres que precede (pre-literal) o continúa (post-literal) a un campo para darle legibiidad a la información presentada.  
 +
 
 +
Existen varios tipos de literales:
 +
{| class="wikitable"
 +
|-
 +
| valign=top |Condicionales || Se incluyen en la salida si el campo asociado está presente. Se encierran entre comillas dobles  (").
 +
    Ej: "Autor: "v10," / Título: "v12
 +
En este caso en la salida se coloca el rótulo Autor si está presente el subcampo a del campo 10, luego se coloca el contenido del subcampo a del campo 10 y se termina la edición del campo 10 con un punto. A continuación se coloca el valor / Título si está presente el campo
 +
 
 +
|-
 +
| valign=top| Incondicionales || Texto de celda
 +
|-
 +
| Texto de celda || Texto de celda
 +
|-
 +
| Texto de celda || Texto de celda
 +
|-
 +
| Texto de celda || Texto de celda
 +
|-
 +
| Texto de celda || Texto de celda
 +
|-
 +
| Texto de celda || Texto de celda
 +
|}
 +
 +
 
 
Condicionales Se incluyen en la salida si el campo asociado está presente. Se encierran entre comillas dobles  (").
+
Ej: "Autor: "v10," / Título: "v12 En este caso en la salida se coloca el rótulo Autor si está presente el subcampo a del campo 10, luego se coloca el contenido del subcampo a del campo 10 y se termina la edición del campo 10 con un punto. A continuación se coloca el valor / Título si está presente el campo Incondicionales Se incluyen en la salida siempre, sin estar asociados a campo alguno. Se encierran entre apóstrofes (')
+
Se incluyen en la salida siempre, sin estar asociados a campo alguno. Se encierran entre apóstrofes (')
 
Ej: 'Listado de Autores',V10^a El rótulo Listado de Autores se coloca en la salida independientemente de la presencia o ausencia del subcampo a del campo 10  
 
Ej: 'Listado de Autores',V10^a El rótulo Listado de Autores se coloca en la salida independientemente de la presencia o ausencia del subcampo a del campo 10  
 
Si el literal condicional precede al campo se denomina pre-literal; si lo continúa se denomina post-literal. En la construcción "Autor: "v10^a el literal "Autor: " es un pre-literal del subcampo a  y su aparición en la salida está condicionada a la presencia del subcampo a del campo 10.   
 
Si el literal condicional precede al campo se denomina pre-literal; si lo continúa se denomina post-literal. En la construcción "Autor: "v10^a el literal "Autor: " es un pre-literal del subcampo a  y su aparición en la salida está condicionada a la presencia del subcampo a del campo 10.   

Revision as of 11:44, 21 December 2013

Extractores de campos

El lenguaje de formatos permite extraer información de un registro CDS/Isis, prepararla y presentarla al usuario por pantalla o enviarla a impresoras u otros medios de salida.

Para extraer información de un registro se usan los extractores de campos, los cuales, en su forma más sencilla se forman con la letra v (en mayúscula o minúscula, indistintamente), seguida por la etiqueta del campo cuyo contenido se desea extraer:

       Vxx    Incluye en la salida el campo cuya etiqueta representa el valor xx
              Ej:v10 

Si el campo posee subcampos, en la extracción del campo se debe indicar el subcampo que se desea acceder

      Vxx^a   Incluye en la salida el subcampo (^a) o 
              equivalente presente en campo con etiqueta xx. Ej: v10^a, v10^r

Cuando el primer subcampo de un elemento de datos es obligatorio, como en el caso de los nombres personales los cuales se forman con el apellido y el nombre propiamente dicho estando siempre presente el apellido; entonces, en este caso no es necesario identificar el apellido con un delimitar de subcampos ya que es un elemento obligarorio. El ingreso se podrá realizar de la siguiente forma:

              Ruiz Alvarado^nFernando 						

El primer subcampo del campo es Ruiz Alvarado y para referenciarlo se usa la construcción ^* lo cual es equivalente a primer subcampo del campo, entendiendose como primer subcampo la cadena de caracteres existente desde el inicio del campo hasta que se encuentre un delimitador de subcampos (^) o el fin del campo. Bajo este concepto, si la etiqueta del campo nombre es 10, el comando

              v10^*,", "v10^n 

producirá como salida

              Ruiz Alvarado, Fernando 				

Extractores virtuales de campo

Estos elementos del lenguaje de formatos se utilizan para generar un literal en el formato de salida, dependiendo de si un campo está presente o ausente. Son los siguientes:

             Dxx 

Presenta en la salida el literal asociado, si el campo con etiqueta xx está presente en el registro:

              Ej: "El campo tiene materias. "d76				

En la salida se incluye el rótulo El campo tiene materias. si el campo 76 está presente en el registro. Si el campo 76 está ausente, no se genera el literal correspondiente

              Nxx 

Coloca en la salida el literal asociado si el campo con etiqueta xx está ausente.

              Ej: "S/F"n43

En la salida aparecerá el literal S/F si el campo 43 está ausente. Si el campo está presente no se genera salida ninguna

En ninguno de estos casos se coloca el contenido del campo en la salida generada.

Extractores parciales de campo

El lenguaje de formatos permite extraer una subcadena de caracteres de un campo especificando el inicio de la cadena a extraer y la longitud de la misma.

Para ilustrar este aspecto, consideremos el caso de un campo de fecha tratado bajo la norma ISO, la cual establece que el ingreso debe realizarse de la siguiente manera: AAAAMMDD, o sea, que el ańo simpre será el primer elemento del campo y constará de dos dígitos, a continuación se colocará el mes, siempre con dos dígitos y al final del día, también con dos dígitos.

El ańo, al ser el primer elemento del campo, está desplazado 0 (cero) caracteres respecto al inicio del campo; el mes está desplazado 4 caracteres respecto al inicio del campo y el día está desplazado 6 caracteres respecto al inicio del campo.

Gráficamente, ésto corresponde a la siguiente situación:

         Contenido del campo   Desplazamientos respecto al orígen del campo
               20011001		      01234567				 		

Para extraer porciones de un campo, el lenguaje de formatos permite expresar una porción de un campo en términos de su posición respecto al orígen (desplazamiento) y de la cantidad de caracteres a tomar en cuenta a partir de esa posicion inicial (longitud). El símbolo para identificar el valor del desplazamiento es el * (asterisco) y la longitud se expresa con símbolo . (punto). Entonces, la construcción

               Vxx*D.L    extraerá L caracteres del campo xx tomados a partir del
                          desplazamiento D respecto al inicio del campo.		

Ej. Si el campo 44 se ingresó con el valor 20010915, tendremos:

                v44*6.2 = 15
                v44*4.2 = 09
                v44*0.4 = 2001 

Si el desplazamiento es cero, esto es, la porción que deseamos obtener se encuentra al inicio del campo, entonces, no es necesario especificar es desplazamiento sino lo solo la longitud del segmento a extraer.

                Ejm: v44*0.4 = v44.4		

Si la longitud del segmento que deseamos extraer se ubica a partir de un desplazamiento x hasta el final del campo, no es necesario especificar la longitud a extraer.

                Ejm: v44*6.2 = v44*6 

Al omitirse la longitud se toma desde la posición 6 el resto de caracteres presentes en el campo (2)

Literales

Como ya mencionamos en la sección Estructuras CDS/Isis, estas bases de datos están orientadas a almacenar información cuyo mayor componente sea texto, a través de registros de longitud variable. Este tipo de información generalmente se presenta en forma de párrafo y muy pocas veces en reportes columnares. Al formar párrafos debemos utilizar signos de puntuación para separar los elementos de datos. Por ello, el lenguaje de formatos del CDS/Isis está orientado hacia la formación de párrafos con la inclusión de rótulos, signos de puntuación y otros elementos de edición para la separación de los campos del registro.

Los elementos de separación generalmente toman la forma de literales. Entonces, podemos definir un literal como un caracter o cadena de caracteres que precede (pre-literal) o continúa (post-literal) a un campo para darle legibiidad a la información presentada.

Existen varios tipos de literales:

Condicionales Se incluyen en la salida si el campo asociado está presente. Se encierran entre comillas dobles (").
   Ej: "Autor: "v10," / Título: "v12

En este caso en la salida se coloca el rótulo Autor si está presente el subcampo a del campo 10, luego se coloca el contenido del subcampo a del campo 10 y se termina la edición del campo 10 con un punto. A continuación se coloca el valor / Título si está presente el campo

Incondicionales Texto de celda
Texto de celda Texto de celda
Texto de celda Texto de celda
Texto de celda Texto de celda
Texto de celda Texto de celda
Texto de celda Texto de celda



																						Se incluyen en la salida siempre, sin estar asociados a campo alguno. Se encierran entre apóstrofes (')				

Ej: 'Listado de Autores',V10^a El rótulo Listado de Autores se coloca en la salida independientemente de la presencia o ausencia del subcampo a del campo 10 Si el literal condicional precede al campo se denomina pre-literal; si lo continúa se denomina post-literal. En la construcción "Autor: "v10^a el literal "Autor: " es un pre-literal del subcampo a y su aparición en la salida está condicionada a la presencia del subcampo a del campo 10. En la construcción "Autor: "v10^a"," , v10^b el subcampo a posee un pre-literal y un post-literal, representado este último por el caracter , (coma). Esto quiere decir que si el subcampo a está presente tendremos su contenido precedido por el rótulo Autor: y seguido por una coma. Pero en la construcción "Autor: "v10^a , ","v10^b el literal ", " ya no es un post-literal del sub-campo a sino un pre-literal del subcampo b. żLa causa?. Hemos introducido un elemento de separación (la coma) que permite guiar al procesador del lenguaje del formato para avisarle donde tiene que hacer una pausa para comenzar una nueva sentencia. La coma es un elemento importante dentro del lenguaje de formatos ya que nos permite guiar al procesador de comandos para darle sentido exacto a la forma como deseamos combinar los elementos del lenguaje. Ejemplo de uso de literales: TagContenidoFormatoSalida 3^a330.987^bM319^cdv3^a,"."v3^b,"."v3^c330.987.M319.d 3^a330.987^bM319^cdv3^*,"/"v3^b,"/"v3^c330.987/M319/d 3^a330.987^bM319^cdv3^*.3,"/"v3^b,"/"v3^c330/M319/d 3^a330.987^bM319^cdv3^a*4987 3^a330.987^bM319^cdv3*2.3330 9Documentos de Reunionesv9Documentos de Reuniones 9Documentos de Reunionesv9^*Documentos de Reuniones 10Mantellini^bHéctorv10^*,", "v10^bMantellini, Héctor 10Mantellini^bHéctorv10^b," "v10^*Héctor Mantellini 4419890314v44.41989 4419890314v44*40314 4419890314v44*4.203 4419890314v44*6,"-"v44*4.2,"-"v44.414-03-1989 4419890314v44.4,"-"v44*4.2,"-"v44*61989-03-14 4419890314v44.6198903 Hemos visto que un literal está asociado al campo o subcampo que inmediatamente lo continúa o precede. Entonces, żqué hacer si tenemos un campo con tres subcampos y queremos colocar un literal antes del campo sin importar el subcampo que esté presente?. Tomemos como ejemplo el siguiente contenido: 26: ^aBolivia^bUnesco^c-1965 el cual queremos desplegar de la siguiente manera: Pié de Imprenta: Bolivia. Unesco (-1965) El formato "Pié de imprenta: "v26^a, ". "v26^b, " ("v26^c")" produce la salida deseada solo si el subcampo a está presente. Si está ausente no se genera el rótulo asociado Pié de imprenta. Para solucionar esta situación utilizamos los Extractores virtuales de campo con lo que expresaríamos el formato de la siguiente manera:

	"Pié de imprenta: "d26,v26^a". ",     v26^b,       " ("v26^c")".	

Note también que el literal ". " ya no es un preliteral de v26^b sino un post-literal de v26^a lo cual se logró moviendo la coma que separa los elementos de formato. Este cambio se hizo ya que el punto que separa el ^a del ^b no puede puede estar condicionado al ^b ya que si el ^a no está presente tendríamos en la salida un punto que no estaría asociado a ningún dato.

Espaciado vertical

CaracterFunción /Salto de línea condicional. Genera el salto de línea únicamente si la línea no está vacía. Si se incluyen varios comandos / adyacentes, aunque desde el punto de vista de la sintáxis del lenguaje no se presenta ningún problema, se tendrá el mismo efecto que un comando / sólo; esto es, una / nunca generará líneas en blanco. Para generar líneas en blanco use el comando # Nota: Si una línea posee tabuladores o espacios en blanco, no está vacía y operará el salto de línea. #Salto de línea incondicional. Genera un salto de línea siempre %Elimina el salto de línea si la línea anterior está vacía El uso del comando # puede generar un problema en aquellos casos donde el campo seleccionado esté ausente. Esta situación se ilustra más claramente por el siguiente ejemplo: /#v10/#v20/#v30 . . . . . Si todos los campos están presentes en el registro, el resultado será que cada uno de los campos 10, 20 y 30 se muestran en una nueva línea y están precedidos por una línea en blanco. Sin embargo, si el campo 20 no existe, habrá dos líneas en blanco entre el campo 10 y el 30. Esto puede ser indeseable si lo que en realidad se desea es una línea en blanco entre los campos, indistintamente de la presencia o ausencia de alguno de ellos. En ese caso, el formato anterior no producirá los resultados deseados. El comando % se ha previsto para resolver esta situación. Su efecto es el de suprimir todas las líneas en blanco contiguas (en caso de que las haya), entre la línea actual y la última línea que no esté en blanco en el momento de la ejecución del comando. Por lo tanto, el formato: %##v10%##v20%##v30 . . . . . producirá una y sólo una línea entre cada campo, aun cuando uno o más de ellos estén ausentes de un registro dado Espaciado Horizontal

     Los comandos de separación horizontal permiten establecer márgenes, sangrías y el tipo de justificación a aplicar sobre los párrafos. Las medidas se expresan  en puntos (una pulgada equivale a 1440 puntos y un centímetro a 567 puntos).    		
     

Márgenes de los párrafosM ( sangría,psangría )donde:sangría es la sangría a aplicar al párrafo desde el margen izquierdo, y psangría es la sangría de la primera línea del párrafo. TabulaciónTAB oTAB ( valor )donde:valor indica la posición del siguiente carácter expresada en pasos desde el margen izquierdo actual. Justificación de párrafosqc Centrado qj Justificado ql Justificado a la izquierda qr Justificado a la derecha OtrosXn Inserta n espacios antes de formatear el siguiente campo Cn Salta a la posición n de la línea Vxx(M,N) Presenta la variable identificada con el etiqueta xx y coloca una sangría de M columnas para la primera línea del campo, y una sangría de N columnas para las líneas de continuación del campo (Sólo debe usarse en el caso de fuentes de tamańo no proporcional, Ej: Courier)