OpenQM
3.4-11
Enséñate a
Ti Mismo
OpenQM
Enseñate a Ti Mismo OpenQM
Copyright © Ladybridge Systems, 2018
Todos los derechos reservados. Ninguna parte de esta obra puede ser reproducida de ninguna forma ni por ningún medio - gráfico, electrónico o
mecánico, incluyendo fotocopias, grabaciones, grabaciones o sistemas de almacenamiento y recuperación de información - sin el permiso por escrito
del editor.
Los productos a los que se hace referencia en este documento pueden ser marcas comerciales y / o marcas comerciales registradas de los respectivos
propietarios. El editor y el autor no reclaman estas marcas.
Si bien se han tomado todas las precauciones en la preparación de este documento, el editor y el autor no asumen ninguna responsabilidad por errores u
omisiones, o por daños resultantes del uso de la información contenida en este documento o del uso de programas y código fuente que puedan
acompañarlo. En ningún caso el editor y el autor serán responsables de cualquier pérdida de beneficios o cualquier otro daño comercial causado o
presuntamente causado directa o indirectamente por este documento.
Agradecimientos especiales a:
Editor
Los usuarios del producto OpenQM que han contribuido con
temas y sugerencias para este manual.
Ladybridge Systems Limited
17b Coldstream Lane Hardingstone Northampton
NN4 6DB England
Editor Técnico
Martin Phillips
Esta información siempre es muy apreciada, así que sigue
enviando comentarios a support@[Link].
Gráfico de la portada
Ishimsi
Tabla de Contenido
1 Introducción 4
2 El Entorno de Comandos 15
3 El Sistema de Archivos QM 26
4 Editando Datos 35
5 El Archivo VOC 35
6 Diccionarios 44
7 Conversión y Formateo 51
8 Atributos virtuales 60
9 Registros de Diccionario de Tipo A y S 79
10 Procesador de Consultas 83
11 Índices Clave Alternativos 121
12 Parágrafos 126
13 Menús 143
14 Impresión 145
15 Introducción a la Programación QMBasic 147
16 ¿Qué sigue? 318
1.- Introducción
Este curso de auto-estudio le enseña sobre el producto de base de datos
OpenQM. Aunque usted puede tener experiencia de otros sistemas de bases
de datos, este curso no asume ningún conocimiento previo. El material está
diseñado para ser igualmente útil para los involucrados con QM en su
empleo, actividades de ocio o en entornos educativos.
Si usted es un principiante, le recomendamos que trabaje en este curso
estrictamente en secuencia ya que cada etapa puede depender del
conocimiento adquirido en etapas anteriores. Si usted es experimentado, usted
puede desear saltarse algunas secciones pero trate de tener cuidado de no
omitir cosas que usted no ha encontrado antes.
Hay ejercicios extensos que cubren las áreas clave del entorno QM
incluyendo el procesador de comandos, archivos de base de datos y
diccionarios, procesamiento de consultas y programación. Todos estos pueden
realizarse utilizando la versión personal gratuita de QM, una licencia de
evaluación o una instalación comercial totalmente autorizada. Recomendamos
encarecidamente que abordes todos los ejercicios y los ejemplos incluidos en
el texto. Cuanto más experimente con el producto, más aprenderá al respecto.
En particular, tenga en cuenta que hay algunos ejercicios que forman una
secuencia a través de las secciones que cubren los diccionarios y el
procesador de consultas, cada uno dependiendo de los anteriores. De manera
similar, la sección de programación construye una aplicación paso a paso
sobre todo el conjunto de módulos.
El material presentado aquí se ha montado a partir de módulos que abarcan
diez días, cuando se entrega como un curso de entrenador dirigido. No esperes
terminar en una tarde! En su lugar, tómese su tiempo y asegúrese de que
entiende cada paso antes de pasar adelante.
A medida que avance en este material, puede consultar el QM Reference
Manual completo o el sistema de ayuda (contienen el mismo texto) para
obtener descripciones más detalladas de elementos de sintaxis específicos. A
más largo plazo, puede resultar útil mantener a mano una copia impresa de la
QM Quick Reference Guide. Y, una vez que hayas dominado todo lo que está
cubierto en este curso, hay mucho más que descubrir por ti mismo a través de
la documentación del usuario
Convenciones de los documentos
Toda la documentación de QM utiliza un conjunto simple de convenciones en
las descripciones de comandos o elementos de lenguaje. Por ejemplo:
[Link] {DATA | DICT} [Link] {FORCE}
Elementos en negrita ([Link]) son palabras que deben ingresarse tal
como aparecen en la descripción excepto que en la mayoría de los casos
pueden estar en mayúsculas o minúsculas.
Elementos en cursiva ([Link]) representan órdenes en comandos o
instrucciones de lenguaje donde algunos datos variables son requeridos. En
este caso es el nombre de un archivo.
A menos que se indique explícitamente, los elementos entre corchetes (por
ejemplo, {FORCE}) son partes opcionales de un comando o una sentencia.
Los corchetes no forman parte del texto y no deben escribirse.
Las listas de palabras clave alternativas se muestran separadas por caracteres
de barras verticales (e.g. {DATA | DICT}).
Los puntos que pueden repetirse son seguidos por elipsis (...). El texto explica
las reglas que rigen los artículos relacionados.
Los caracteres de marca introducidos en la descripción del modelo de datos son
representados por IM, FM, VM, SM y TM.
¿Qué es una Base de Datos?
Hay muchas definiciones, pero para nuestros propósitos digamos que una base
de datos es una colección de datos organizados de una manera que permite la
recuperación de elementos específicos de una manera eficiente. Ignorando las
computadoras por un tiempo, imagínese tratando de encontrar el número de
teléfono de un amigo en la guía telefónica si no se seleccionó según un orden.
Usted necesitaría leer a través del directorio hasta que usted encontre la entrada
que usted buscaba. Esto podría estar cerca del principio; Podría estar cerca del
final. En promedio usted necesitaría leer la mitad del directorio. Esto sería
totalmente inútil para cualquier propósito realista.
Por supuesto, la guía telefónica no se construye de esta manera. En su lugar, las
entradas se ordenan en orden alfabético y cada página tiene un encabezado para
indicarle qué entradas hay en la página. Por lo tanto, sólo necesita encontrar la
página correcta y luego explorar los elementos de esa página. La guía
telefónica tal vez se ajuste a nuestra definición de una base de datos, ya que
está organizado de una manera que le permite encontrar elementos
rápidamente.
Es interesante mirar lo que hace el subconscientemente al buscar un número de
teléfono. Si tiene una guía telefónica a mano, lea no más allá del final de esta
oración y luego vaya a buscar la primera entrada para “A Thomas”.
¿Qué hiciste? Bueno, espero que no comience en la página 1 y lea página por
página hasta que encuentre lo que busca. Usted probablemente se sumergió en
parte a través de, miró para ver lo que estaba en esa página y luego decidió si
trabajar hacia adelante o hacia atrás. Probablemente también aplicó un poco de
conocimiento previo de la distribución de nombres, empezando
aproximadamente dos tercios del camino a través del directorio y luego
moviéndose hacia adelante o hacia atrás varias páginas a la vez basándose en
cuán lejos estaban las de su entrada de destino.
Este tipo de proceso de búsqueda es típico de la forma en que las computadoras
encuentran cosas en grandes bases de datos. El ejemplo anterior está
estrechamente relacionado con una técnica simple conocida como "búsqueda
binaria" que puede encontrar un elemento en listas ordenadas con un mínimo
examen de los datos. De hecho, es posible encontrar cualquier entrada en una
lista de un millón de artículos examinando en la mayoría de sólo veinte de
ellos. Si todavía tiene la guía telefónica a mano, pruebe el siguiente método
para encontrar “A Thomas” de nuevo:
Abra la guía telefónica en (aproximadamente) la página central. Si esta es la
página que queremos, bien hecho, que era demasiado fácil! Suponiendo que las
cosas no salieron tan rápido, decidir qué mitad del libro contiene la entrada que
desea. Ahora ve a la página en el centro de esa mitad del libro. Sigue haciendo
esto, reduciendo a la mitad el tamaño de la sección de interés hasta llegar a la
página correcta.
La búsqueda binaria descrita anteriormente es sólo una de una gama de
técnicas utilizadas por el software de base de datos para encontrar
información. Nos reuniremos con otros cuando discutamos el producto
OpenQM. Lo importante en esta etapa es simplemente que es un ejemplo de lo
que queremos decir cuando definimos una base de datos como organizada de
manera que permita una recuperación eficiente de los datos.
Bases de Datos Relacionales
Hay muchas bases de datos diferentes disponibles, pero todas pertenecen a una
pequeña cantidad de tipos básicos. Una de ellas es la base de datos
relacional, como Oracle o Access. Una base de datos relacional contiene
datos en forma de tablas de la misma manera que podríamos almacenar
información como tablas escritas en papel. (El término relacional infiere
simplemente que los datos en una tabla están relacionados de alguna manera).
A lo largo de este material, basaremos nuestros ejemplos en un simple sistema
de procesamiento de pedidos. Este es un concepto que es fácil de entender si
usted está involucrado en las ventas. El sistema que construimos crecerá en
complejidad a medida que progresemos, pero por ahora sólo necesitamos tener
información sobre los pedidos que cada cliente ha realizado. Manteniendo las
cosas muy simples, al menos podríamos necesitar una tabla como la que se
muestra a continuación.
Orden no Fecha Cliente Producto Cantidad
1001 12 Jan 05 1728 107 2
1002 12 Jan 05 3194 318 2
1003 13 Jan 05 7532 220 1
1004 13 Jan 05 1263 318 2
En esta tabla simple, cada fila representa una orden y cada columna contiene
datos asociados con ese orden.
El diseño de las bases de datos eficientes requiere una reflexión sobre lo que
debe almacenar y, una vez que llegamos a varias tablas, cómo organizarlo. Se
ha hecho mucho trabajo académico sobre la teoría subyacente. Bases de datos
relacionales se construyen siguiendo un conjunto de reglas conocidas como las
Reglas de Normalización [E. Codd : "A Relational Model of Data for Large
Shared Data Banks", Communications of the ACM, June 1970]. El proceso
de transformación de datos para ajustarse a las reglas de una base de datos
relacional se llama normalización y los pasos de este proceso se conoce como
la primera forma normal, la segunda forma normal, y así sucesivamente. No
vamos a estudiar estas reglas en detalle aquí. Si usted está interesado, hay
muchos libros de texto de computación que cubren este material
La Primera Regla de Normalización indica que no es posible tener datos
repetidos. En términos prácticos esto significa que no podemos agregar
columnas adicionales a la derecha de la tabla para permitir que un cliente
ordene más de un artículo al mismo tiempo.
Orden no Fecha Clien Produc Cantidad Producto Cantidad
te to
1001 12 Jan 05 1728 107 2
1002 12 Jan 05 3194 318 2 452 3
1003 13 Jan 05 7532 220 1
1004 13 Jan 05 1263 318 2
Es evidente que esta restricción no es aceptable en el mundo real.
Hay muchas razones por las que las Normas de Normalización no lo permiten,
sobre todo basadas en la forma en que los datos pueden ser almacenados por el
sistema informático. Esto es especialmente cierto para los lenguajes de
programación que fueron más utilizados para aplicaciones empresariales
cuando se diseñó el modelo relacional. Si debemos observar la Primera Regla
de Normalización, debemos reconstruir nuestros datos de alguna manera que
elimine las columnas adicionales. Una forma sería dividir un pedido que tiene
varios elementos en varias filas de nuestra tabla.
Orden no Fecha Cliente Producto Cantidad Lineas
1001-1 12 Jan 05 1728 107 2 1
1002-1 12 Jan 05 3194 318 2 2
1002-2 12 Jan 05 3194 452 3 2
1003-1 13 Jan 05 7532 220 1 1
1004-1 13 Jan 05 1263 318 2 1
Aunque ahora podemos almacenar tantos artículos en un orden como
deseamos, las cosas se han vuelto más complicadas. En primer lugar, los
detalles de una sola orden se dividen ahora en varias filas de nuestra tabla. En
segundo lugar, nos hemos visto obligados a añadir una columna extra para que
podamos saber cuántas líneas hay en el orden. Además, hemos duplicado
alguna información, un paso que realmente rompe otra de las Normas de
Normalización. Para evitar esta última complicación, una implementación
típica de este tipo de datos en un sistema totalmente normalizado (por ejemplo,
Oracle o Access) rompería los datos del pedido en dos tablas separadas, una
que contenía la información básica sobre el pedido y la otra contenía los
detalles de los artículos ordenados.
Orden no Fecha Cliente Linea
s
1001 12 Jan 05 1728 1
1002 12 Jan 05 3194 2
1003 13 Jan 05 7532 1
1004 13 Jan 05 1263 1
Detalle Producto Cantidad
Ref
1001-1 107 2
1002-1 318 2
1002-2 452 3
1003-1 220 1
1004-1 318 2
Las cosas se están convirtiendo en complejas y se supone que esto es una
aplicación trivial!
Bases de Datos MultiValor
Los productos de bases de datos MultiValor evitan esta complicación
eliminando la necesidad de adherirse a la Primera Regla de Normalización.
Permitimos que una sola celda de nuestra tabla contenga más de un valor (de
ahí el término "MultiValor").
Orden no Fecha Cliente Producto Cantidad
1001 12 Jan 05 1728 107 2
1002 12 Jan 05 3194 318 2
452 3
1003 13 Jan 05 7532 220 1
1004 13 Jan 05 1263 318 2
Si usted ha pasado muchos años trabajando con bases de datos completamente
normalizadas, probablemente está sacudiendo la cabeza y diciendo que no
podemos hacer esto. Sí podemos hacerlo; Es sólo una forma diferente de
mantener nuestros datos.
Piense en las ventajas: Toda la orden se mantiene como un solo registro; No
hay duplicación redundante de datos; No necesitamos un contador de artículos.
El resultado final de esto es que nuestra visión MultiValor del mundo produce
aplicaciones que tienen menos tablas comparadas con su contraparte
completamente normalizada, muchas veces muchas menos. Como resultado de
esto, es típicamente mucho más rápido (y por lo tanto más barato) para
implementar y más rápido de ejecutar. También es mucho más fácil de
modificar a medida que se agregan nuevas características a los datos. Dicho
esto, siempre habrá situaciones en las que este modelo no es ideal. En tales
casos, puede volver a utilizar libremente el enfoque totalmente normalizado
porque los datos totalmente normalizados pueden almacenarse en una base de
datos de valores múltiples. Lo contrario no suele ser cierto.
Ha llegado el momento de introducir una terminología. Una aplicación típica
tendrá muchas tablas, tal vez cientos o incluso miles, sin embargo, como
hemos visto, el modelo MultiValor generalmente resulta en un número mucho
menor de tablas que en otros modelos de datos. Cada tabla se almacena como
un archivo. Las filas de nuestra tabla se conocen como registros y las
columnas como campos (algunos sistemas se refieren a estos como
atributos). Los datos almacenados en un campo pueden estar formados por
múltiples valores.
Observe cómo en nuestra implementación MultiValor del ejemplo anterior,
los valores en las columnas de producto y cantidad están relacionados entre sí.
Para cualquier orden particular, el primer número de producto pertenece a la
primera cantidad, el segundo número de producto pertenece a la segunda
cantidad y así sucesivamente. Una tabla realista típica puede tener varios
conjuntos separados de campos que están enlazados de esta manera. La
relación entre los valores en diferentes campos (por ejemplo, el producto y la
cantidad anterior) se denomina asociación.
Al adoptar este modelo de datos en lugar de utilizar columnas adicionales, el
modelo de datos no impone ningún límite al número de artículos que pueden
incluirse en una orden.
El modelo de datos MultiValor nos permite ir un paso más allá; Los valores
pueden subdividirse en subvalores. Quizás cada vez que vendemos un artículo
necesitamos anotar su número de serie. Por lo tanto, cada una de las partes en
nuestro ejemplo anterior tendría una lista de números de serie asociados con
él. La orden 1002 en el ejemplo anterior podría:
Orden no Fecha Cliente Producto Cantidad Serial
1002 12 Jan 05 3194 318 2 21222
21223
452 3 41272
41723
41728
Esta forma extendida del modelo de base de datos relacional está en el corazón
de la base de datos QM. También puede ver que se hace referencia como post-
relacional, tabla anidada o NF2 (no primera forma normal). Todos significan
lo mismo.
Es útil comprender cómo se representan los datos MultiValor dentro de QM.
Un registro de base de datos en la memoria o dentro del archivo se almacena
como una secuencia de caracteres conocida como matriz dinámica. Los
límites entre los campos están marcados por un carácter especial llamado
marca de campo. Los límites entre valores dentro de un campo MultiValor
están marcados por marcas de valor y los límites entre subvalores se marcan
usando marcas de subvalor. En nuestra representación impresa de una matriz
dinámica, utilizamos FM, VM y SM para representar los caracteres de marca.
Así, los datos para el número de orden 1002 anterior estarían representados
como
13527FM3194FM318VM452FM2VM3FM21222SM21223VM41272SM
41723SM41728
Hay varias cosas importantes que debe notar acerca de este ejemplo. En
primer lugar, el número de orden no está en los datos. Cada registro debe
tener un valor único por el cual se identifica en la tabla. Este ID de registro o
clave primaria puede ser cualquier secuencia de caracteres y puede
considerarse como el nombre del registro. Aunque debe ser almacenado en la
base de datos internamente, no se considera que sea parte de los datos. Cuando
una aplicación solicita al sistema que extraiga el registro 1002 de la tabla de
órdenes, el identificador de registro se utiliza para localizar el registro pero no
forma parte de los datos devueltos
En segundo lugar, tenga en cuenta que la fecha (12 de enero de 2005) se ha
almacenado como el número 13527. QM almacena fechas internamente como
un número de días a partir de una fecha de referencia. Discutiremos esto en
detalle más adelante.
En tercer lugar, observe que debido a que usamos caracteres de marca para
separar cada campo, valor o subvalor, los datos reales son de longitud
variable. Aunque una aplicación puede mostrar el número de cliente como
cuatro dígitos, la base de datos subyacente no impone ninguna restricción. No
necesitamos rediseñar las estructuras de datos cuando nuestro diez milésimo
cliente camina por la puerta aunque la pantalla de entrada de datos puede
necesitar un pequeño cambio.
La forma de leer una estructura de registro como la que se muestra arriba es
desmontarla capa por capa. En primer lugar encontrar las marcas de campo
para separar cada campo, a continuación, busque los valores dentro de los
campos y, finalmente, los subvalores dentro de los valores. El uso de
MultiValor es muy común; Subvalores son mucho menos utilizados, así que
no te preocupes demasiado si tienes problemas para comprender el concepto -
¡te estamos pidiendo que pienses en cuatro dimensiones!
En realidad hay cinco caracteres de marca, los dos adicionales son la marca de
artículo (a veces llamada la marca de registro que apenas se usa en QM) y la
marca de texto que se utiliza al dividir elementos de texto largos en varias
líneas. Nos encontraremos con ambos de nuevo más tarde.
Si está familiarizado con la forma en que los datos de caracteres se almacenan
como valores de byte único, puede ver en la tabla siguiente que los caracteres
de marca se almacenan internamente como los cinco caracteres finales del
conjunto de caracteres. Esto no fue un problema cuando el modelo de datos
fue originalmente concebido como la mitad superior del conjunto de caracteres
no se definió. Esto ya no es cierto y la mitad superior del conjunto de
caracteres tiene varias definiciones que se corresponden en gran medida con
caracteres específicos del lenguaje, como los caracteres acentuados de las
lenguas europeas. Desafortunadamente, usar los últimos cinco caracteres para
nuestros propios propósitos significa que los caracteres que hemos desplazado
no pueden ser almacenados. Por ejemplo, utilizando el conjunto de caracteres
más común utilizado en Europa, la marca de subvalor sustituye a la u-umlaut
alemana (ü) por lo que no podemos almacenar el nombre alemán Müller
correctamente. Esto es claramente inaceptable en algunos países y QM tiene
un modo Extended Character Set (ECS) que soporta el conjunto mucho
mayor de caracteres que forman el Unicode Basic Mulitlingual Plane. ECS
no se discute más en este curso.
ASCII Sym @var
bol
Item mark 255 IM @IM
Field mark 254 FM @FM
Value mark 253 VM @VM
Subvalue mark 252 SM @SM
Text mark 251 TM @TM
La columna de símbolos muestra cómo se representan estos caracteres en
ejemplos en la documentación de QM. La columna @var da nombres
simbólicos que pueden usarse para estos caracteres en algunos lugares dentro
de QM como discutiremos más adelante.
La Historia de las Base de Datos MultiValor
La base de datos MultiValor original se atribuye generalmente a Dick Pick
(de ahí el término de uso frecuente "Base de Datos Pick") en 1968, aunque
sus orígenes pueden ser rastreados más allá. La Base de Datos actual D3 es un
descendiente directo del producto original Pick pero ha habido muchos otros
jugadores a lo largo del camino, algunos grandes, algunos pequeños. Algunas
de ellas son importantes para la manera en que QM funciona.
La base de datos Reality, originalmente implementada en los sistemas
McDonnell Douglas pero ahora propiedad de Northgate Information
Solutions, sigue de cerca el estilo Pick de operación. La base de datos de
Prime Information de Prime Computer conservó el mismo modelo de datos
y principios generales, pero realizó algunos cambios bastante significativos en
los lenguajes de comando y de programación.
A mediados de los años ochenta, las diversas empresas con productos
MultiValor tuvieron un problema. El mundo estaba estandarizando en el
sistema operativo Unix, pero estos productos no funcionaban en Unix. Como
resultado de esto, McDonnell Douglas desarrolló una versión de "sistemas
abiertos" de Reality (Reality X) y Prime Computer desarrolló la base de
datos PI/Open. Al mismo tiempo, dos empresas de nueva creación
aparecieron cada una con su propia implementación MultiValor basada en
Unix, VMark (UniVerse) y Unidata (Unidata). Estas empresas se
propusieron capturar a los usuarios de los productos existentes, así como
asumir nuevos usuarios. La historia es larga y compleja, pero para ponerla al
día en un solo paso, UniVerse, UniData y D3 son ahora propiedad de Rocket
Software.
Los productos UniVerse y Unidata (usualmente referidos colectivamente
como U2) siguen el estilo de implementación de Information por defecto pero
tienen características que les permiten verse más como el estilo Pick si es
necesario.
QM se desarrolló originalmente en 1993 para su uso como una base de datos
incrustada, pero no se publicó como un producto por derecho propio hasta
2001. Al igual que los productos U2, es una base de datos de estilo de
Information, pero tiene opciones para que sea más como Pick para aquellos
que lo necesitan. Excepto donde se indica, los ejemplos y ejercicios de este
curso se basan en QM "directamente de la caja" sin opciones de
compatibilidad habilitadas.
Los desarrolladores que tratan de defender el modelo relacional
completamente normalizado usualmente empiezan señalando que el modelo
MultiValor tiene más de 40 años y por lo tanto no puede ser relevante en el
mundo moderno. Al decir esto, convenientemente ignoran que los modelos
relacionales y MultiValor fueron desarrollados al mismo tiempo. Una mejor
manera de ver esto es que nada en la industria de la computación dura 40 años
a menos que tenga algo bueno sobre él. Una vez que comience con el modelo
MultiValor se preguntará por qué alguien nunca utilizo algo así.
[Todas las marcas registradas mencionadas en esta introducción son reconocidas.]
2.- El Entorno de Comandos
En esta sección exploraremos el entorno de comandos QM y aprenderemos a
ejecutar comandos simples.
Cuentas
La palabra "cuenta" tiene muchos significados en el mundo de la
computadora. En QM, se refiere a un lugar para trabajar, que normalmente
corresponde a una aplicación de software. Un sistema QM puede tener
muchas cuentas separadas que representan diferentes aplicaciones (ventas,
nómina, etc.) o diferentes versiones de una aplicación (desarrollo, prueba,
producción, etc.).
Un concepto importante en QM es que tratamos de evitar que los usuarios
necesiten saber sobre el sistema operativo subyacente (Windows, Linux, etc.)
que se está ejecutando en su sistema. Si entiende estas cosas, vale la pena
saber que desde fuera de QM, una cuenta está representada por un directorio
del sistema operativo que contiene los archivos de datos, programas, etc que
son utilizados por la aplicación. Todos los sistemas QM también tienen una
cuenta de administrador del sistema (QMSYS) bajo la cual se puede encontrar
todo el software del sistema QM y muchos archivos de control
Aunque las cuentas representan ambientes de trabajo separados, pueden
compartir recursos como archivos y programas. Por ejemplo, es probable que
un sistema con dos aplicaciones que representen el procesamiento de pedidos
de cliente y el control de existencias necesite cierto grado de comunicación
entre los dos. La cuenta QMSYS es un buen ejemplo de esto, ya que contiene
una serie de archivos que son visibles desde todas las otras cuentas.
Las cuentas pueden ser creadas por el Administrador del Sistema utilizando
herramientas administrativas integradas (más adelante) o simplemente
intentando ejecutar QM en un directorio que no está configurado como una
cuenta.
El archivo más importante de una cuenta es el archivo VOC (vocabulario) que
contiene todas las palabras y símbolos que se pueden utilizar en la cuenta para
formar comandos. Si se está moviendo a QM desde un sistema de estilo Pick,
el VOC es ampliamente similar al archivo MD de su sistema antiguo.
El VOC también contiene referencias a todos los archivos (tablas de base de
datos) accesibles desde la cuenta y otros elementos definidos por el usuario.
Un VOC recién creado tiene alrededor de 500 items suministrados por el
sistema en él y generalmente crecerá considerablemente como una aplicación
vaya siendo desarrollada. Hay una sección completa acerca del archivo VOC
más adelante en este curso.
Instalación
Este curso supone que QM ya está instalado en su sistema. Si no es así y está
utilizando un sistema Windows, sigue una descripción del proceso de
instalación. Para otros sistemas operativos, consulte la sección correspondiente
del Manual de referencia de QM para obtener instrucciones sobre cómo
instalar QM.
Aunque QM se puede suministrar en CD, los usuarios normalmente descargan
el software desde el sitio web de OpenQM, [Link], que asegura
que tiene la última versión de este producto en rápido desarrollo.
Para descargar el software, siga el enlace a la página de descarga y seleccione
la versión adecuada para su plataforma. Haga clic con el botón secundario en
el enlace de Descarga y seleccione Guardar como para copiar el archivo de
instalación en su sistema.
Si tiene una licencia comercial o está utilizando una copia de evaluación de
QM, también puede descargar el emulador de terminal AccuTerm siguiendo
el enlace de la página de descarga de QM. El código de activación se incluye
con su licencia de QM.
Debe tener derechos de administrador en la PC para instalar QM, ya que
actualiza los archivos restringidos del sistema. El archivo de instalación
autoextraíble tiene un nombre de la forma qm_1.[Link], donde los
componentes numéricos identifican la liberación. Ejecute este archivo, por
ejemplo, haciendo doble clic en él en el Explorador de Windows. La primera
pantalla confirma que está a punto de instalar QM. Haga click en el botón
Siguiente para continuar.
El proceso de instalación muestra ahora la licencia del software. Marque la
casilla para decir que acepta los términos de esta licencia y haga clic en el
botón Siguiente.
QM se puede instalar en cualquier lugar conveniente. El valor predeterminado
es C:\QMSYS pero se puede cambiar. Una instalación de actualización
ofrecerá el directorio utilizado para la instalación anterior como el
predeterminado.
Una vez seleccionado el directorio de instalación, se le pedirá que especifique
el nombre de la carpeta del grupo de programas en el menú Inicio. Este valor
predeterminado es QM y probablemente es mejor dejarlo sin cambios.
El paso final antes de comenzar la instalación es seleccionar los componentes
a instalar. Los componentes ofrecidos son:
QM Database La base de datos QM.
QM Help Este documento como archivo de ayuda de Windows.
QMTerm Un simple emulador de terminal.
QM Online Documentation Documentación en formato pdf de Adobe
Acrobat.
QMAdmin Una herramienta de administración del sistema basada en
Windows.
QMClient La API de Visual Basic para desarrolladores de Windows.
La acción predeterminada es instalar todos estos componentes y sólo se debe
cambiar para la instalación no estándar.
Una vez realizada la instalación principal, el proceso de instalación muestra
una pantalla en la que se pueden introducir los datos de autorización. Si está
instalando una actualización, se mostrarán los datos de licencia anteriores y se
pueden conservar simplemente pulsando la tecla de retorno en cada campo. Si
está instalando una nueva licencia comercial o una licencia de evaluación,
ingrese los detalles de su licencia. Si está planeando usar la Versión Personal
gratuita, simplemente ingrese la palabra Personal en el campo del número de
licencia. Todo en este curso con la excepción del material de cifrado de datos
se puede hacer en la versión personal, pero tiene algunas limitaciones.
Si se trata de una instalación de actualización, se le preguntará si el archivo
VOC debe actualizarse en todas las cuentas. Aunque probablemente sea una
buena idea, se preguntará a los usuarios acerca de la actualización cuando
ingresen a QM si se deja hasta más tarde.
El proceso de instalación ejecuta el Editor de configuración de QM para
permitir que se realicen cambios en los parámetros de configuración. Deje
todo en su configuración predeterminada y haga clic en Cerrar
Finalmente, el instalador ofrece mostrar el archivo Léame.
Si es un usuario experimentado de las herramientas de línea de comandos de
Windows, tenga en cuenta que el proceso de instalación no agrega QM a la
variable de entorno Windows PATH. Dependiendo de cómo planee operar su
sistema, puede valer la pena agregar el subdirectorio bin de la cuenta QMSYS
a la variable PATH.
Entrar y salir de QM
Aunque QM permite a los desarrolladores construir aplicaciones a las que se
accede a través de un navegador web o mediante pantallas gráficas típicas de
los sistemas de Windows, haremos la mayor parte de nuestro trabajo a través
de la interfaz de "pantalla verde" en modo de caracteres. Más adelante
discutiremos los conceptos web y GUI (interfaz gráfica de usuario).
Una licencia de QM comercial incluye la activación gratuita del emulador de
terminal AccuTerm. Aunque recomendamos esto y AccuTerm incluye
algunas funciones específicamente para usuarios de QM, QM debería
funcionar con la mayoría de los demás emuladores de terminal. Si está
utilizando la versión personal de QM, AccuTerm no está incluido.
Ha llegado el momento de iniciar sesión. Hay varias formas de hacerlo, pero
es posible que necesite ayuda del administrador del sistema al comenzar:
En un sistema Windows, navegue desde el menú Inicio de Programas,
QM y seleccione QMConsole. Esto crea lo que se conoce como una
sesión de consola.
En un sistema Linux, FreeBSD o Mac, escriba "qm" en el símbolo del
sistema del sistema operativo cuando esté en el directorio de la cuenta.
Esto supone que su Administrador del sistema ha agregado el
subdirectorio bin de la cuenta QMSYS a la variable de entorno PATH
que controla el lugar donde su sistema busca los comandos. De lo
contrario, deberá usar la ruta completa (probablemente
/usr/qmsys/bin/qm).
Directamente a través de una red. El administrador del sistema deberá
configurar un nombre de usuario y una contraseña para acceder al
sistema. De forma predeterminada, QM usa el puerto 4242, pero esto
puede haber cambiado en su sistema. Asegúrese de que cualquier puerto
que esté utilizando esté abierto en su firewall.
Dependiendo de cómo se haya configurado su sistema, es posible que deba
ingresar un nombre de cuenta como parte de este proceso. Consulte a su
administrador del sistema para obtener consejos. No utilice la cuenta QMSYS
para fines de desarrollo o capacitación, aunque es posible que deba comenzar
allí y crear una cuenta privada propia. Una vez en QM, puede crear su propia
cuenta para ejecutar los ejercicios de este curso escribiendo:
[Link] nombre pathname
donde nombre es el nombre que le gustaría dar a la cuenta y pathname es el
nombre de ruta del sistema operativo para el directorio de la cuenta. Por
ejemplo:
[Link] JOE C:\JOE
Para salir de QM cuando usted ha finalizado su sesion, escriba QUIT,
LOGOUT u OFF.
Case Inversion
Cuando comiences a usar QM, probablemente notarás que algo muy extraño
está sucediendo. Los caracteres que escribe son "mayúscula invertida", es
decir, las letras minúsculas se muestran en mayúscula y viceversa. Los
sistemas originales MultiValor se remontan a una época en que muchos
terminales no tenían letras minúsculas y, por lo tanto, el lenguaje de comandos
se escribía para trabajar en mayúsculas. Para que sea más fácil operar en
situaciones en las que un usuario puede cambiar entre una sesión de QM y,
por ejemplo, un documento de Word, normalmente QM aplica la inversión de
casos para que el usuario no tenga que seguir presionando la tecla de bloqueo
de mayúsculas.
En realidad, QM es en gran parte insensible a las mayúsculas y minúsculas,
pero esta característica se conserva para la compatibilidad con otros sistemas.
Se puede desactivar escribiendo
PTERM CASE NOINVERT
y esto generalmente se haría como una parte automatizada del proceso de
inicio de sesión para un usuario final de la aplicación. Discutiremos más
acerca de cómo hacer esto más tarde.
Sintaxis de los comandos QM
Un comando completo de QM se conoce como una oración. Una oración
siempre comienza con un verbo que es el nombre del comando. Esto puede ir
seguido de información calificativa, como nombres de archivos,
identificadores de registros y palabras clave. Las oraciones se pueden ejecutar
directamente desde el símbolo del sistema o almacenarse en el VOC para su
posterior ejecución.
Los tokens individuales que componen una oración están separados por uno o
más espacios. Donde un token contiene espacios, debe estar entre comillas. En
la mayoría de los casos, QM permite el uso de comillas simples, comillas
dobles o barras diagonales intercambiables.
Algunos comandos simples sin información calificada se muestran a
continuación. Pruebe cada uno de estos.
CS Borra la pantalla de la terminal
FECHA Muestra la fecha y la hora en formato de reloj de 12 horas
LISTU Muestra una lista de usuarios activos de QM
TIME Muestra la fecha y la hora en formato de reloj de 24 horas
Los comandos más complejos toman información calificada. Algunos útiles se
muestran a continuación, pero todavía no estamos en condiciones de
probarlos.
[Link] ON Al igual que otros productos MultiValor, QM el
valor predeterminado es el formato de fecha estadounidense (mes día año).
Este comando cambia al formato de fecha europeo. Utilizado con OFF en
lugar de ON, cambia al formato de fecha americano. No notará ninguna
diferencia en el resultado de DATE o TIME, ya que estos comandos
establecen explícitamente su formato de visualización de fecha. La
configuración [Link] solo afecta las situaciones en las que una
aplicación dice "imprimir una fecha" pero no especifica cómo debería
aparecer. El software de aplicación generalmente se escribe en fechas de
salida en formatos específicos.
LOGTO Cuenta Cambia a la cuenta nombrada. Esto permite que un
usuario se mueva entre cuentas sujetas a tener suficientes derechos de
acceso.
PHANTOM Comando Ejecuta el comando dado como un proceso en
segundo plano que permite que el terminal se use para otras tareas. Un
proceso fantasma no tiene un terminal asociado, por lo tanto, fallará si
solicita una entrada. Cualquier salida que normalmente aparecería en el
terminal se escribe en el sistema de archivos en un archivo llamado
$COMO. Los PHANTON se usan generalmente para el procesamiento
durante la noche y otras tareas largas.
Muchos comandos hacen referencia a registros en archivos de datos. Estos
tienden a compartir una sintaxis común que toma el nombre del archivo y una
identificación de registro (o, en algunos casos, múltiples identificadores de
registro). Algunos ejemplos son:
CT ID de archivo Copia el registro nombrado en la pantalla de su
terminal, (CT es la abreviatura de Copy to Terminal).
Delete ID de archivo Elimina el registro de la base de datos nombrada.
¡Cuidados! Una vez que haya eliminado un registro, se habrá ido. No hay
un equivalente de la papelera de reciclaje de Windows para deshacer sus
errores.
Ahora es un buen momento para crear la base de datos de demostración que se
utiliza a lo largo de este curso. Para hacer esto escriba:
[Link]
en una cuenta que usará para los ejercicios de este curso. Este comando crea
varios archivos relacionados con dos bases de datos de demostración. A los
fines de este curso, nos interesarán los archivos pertenecientes a una
aplicación de venta de papelería muy simple; STOCK, CUSTOMERS y
SALES. Puede echar un vistazo rápido al contenido del archivo STOCK
escribiendo
LIST STOCK
y de manera similar para los otros archivos.
Puede repetir el comando [Link] en cualquier momento para volver
a la estructura original del archivo. Si desea restaurar los datos originales, pero
deje los elementos nuevos que haya creado en su lugar, use
[Link] UPDATING
Ahora prueba el comando CT escribiendo
CT SALES 12001
¿Qué muestra esto? Como veremos más adelante con más detalle, el archivo
SALES tiene siete campos que representan la fecha del pedido, número de
cliente, número de parte, cantidad, precio, fecha de pago y valor de pago. Los
campos 3, 4 y 5 son campos asociados con varios valores porque un cliente
puede comprar más de una cosa. Del mismo modo, es posible que deseemos
permitir que un cliente pague su pedido por etapas, de modo que los campos 6
y 7 forman un conjunto separado de campos MultiValor asociados.
El comando CT muestra esto como
SALES 12001
1: 14400
2: 1000
3: 001y003
4: 2y1
5: 170y170
6: 14407
7: 510
La primera línea muestra el nombre del archivo y la identificación del registro.
Las líneas restantes son los campos de este registro. El campo 1 no parece una
fecha, pero sí lo es. Esto se debe a que QM almacena las fechas internamente
como un número de días desde un punto de referencia en el tiempo.
Discutiremos esto en detalle más adelante, pero el valor 14400 corresponde al
4 de junio de 2007. Es posible que los campos MultiValor no aparezcan en su
terminal exactamente como se muestra arriba porque los diferentes
emuladores de terminal muestran el Carácter de Marca de Valor de diversas
maneras. Lo encontrarás útil para descubrir cómo su emulador de terminal
particular muestra los caracteres de marca. Una aplicación con buen
comportamiento nunca muestra marcas, ya que representan los límites entre
las piezas de datos, pero hay ocasiones en que es posible que tengamos que
ver cómo se almacenan los datos internamente.
Tenga en cuenta que el registro de datos no contiene nada para mostrar
asociaciones. Este es el trabajo del diccionario que define el diseño de datos
para el archivo. Hay una sección completa de diccionarios de bases de datos
más adelante.
El comando CT es útil para mostrar elementos de texto simples (lo cual
haremos varias veces) y es una buena herramienta para detectar errores en la
forma en que se almacenan los datos. Por ejemplo, un error común en uno de
los ejercicios de programación más adelante en este curso da como resultado
una marca de valor extra al final de la lista de números de parte. Esto sería
claramente visible en la salida del comando CT, pero podría ser bastante
difícil de detectar usando otras herramientas.
El STACK de comandos
QM mantiene un registro de los comandos recientes que ha ejecutado. El
procesador de comandos incluye mecanismos mediante los cuales puede mirar
hacia atrás a estos comandos, modificarlos y repetirlos. Para que esto funcione
correctamente, su sesión de QM debe configurarse para que coincida con el
tipo de terminal que está utilizando. Normalmente, esto sucede
automáticamente, pero puede verificar el tipo de terminal que utiliza QM
escribiendo
TERM
y, si es incorrecto, cámbielo con, por ejemplo,
TERM vt100-at
para seleccionar la emulación del terminal vt100. El sufijo -at en el ejemplo
anterior es para usar con AccuTerm. Otras emulaciones de un terminal vt100
no deberían usar este sufijo. Una sesión de QMConsole utiliza un tipo de
terminal "qmterm".
Para retroceder en el historial de comandos, presione la tecla de cursor hacia
arriba. Si vas demasiado lejos, puedes volver a bajar caminando con la tecla de
cursor hacia abajo. El comando que se muestra actualmente puede repetirse
simplemente presionando la tecla de retorno y puede editar un comando
usando las teclas de cursor horizontal, retroceso, etc. La lista completa de
operaciones de edición es
Ctrl-A o HOME Mueve el cursor para iniciar el comando.
Ctrl-B Cursor a la izquierda Mover el cursor a la izquierda
de un carácter.
Ctrl-D o Delete Eliminar carácter debajo del cursor.
Ctrl-E o END Mueve el cursor al final del comando.
Ctrl-F Cursor a la derecha Mueva el cursor a la derecha un
carácter.
Ctrl-G Salir del stack de comandos y regresa a una línea de
comando limpia.
Ctrl-K Elimina todos los caracteres a la derecha del cursor.
Ctrl-N o Cursor Down Muestra el comando "siguiente" del stack de
comandos.
Ctrl-O o Insert Alternar modo de insert/overlay. Cuando está modo
overlay, los caracteres ingresados en el teclado
sobrescribe cualquier dato existente en la posición
del cursor. En el modo de inserción, se insertan
nuevos caracteres en el texto existente.
Ctrl-P Muestra el comando "anterior" de la pila de
comandos.
Ctrl-R Search Realiza una copia de seguridad del stack de
comandos para una cadena dada.
Ctrl-T Intercambio de caracteres antes del cursor.
Ctrl-U Convierte el comando a mayúscula.
Ctrl-Z o Cursor up Muestra el comando "anterior" del stack de
comandos.
Backspace Retrocede un carácter.
Aunque los códigos de teclas de control anteriores pueden ser un poco difíciles
de recordar al principio, encontrará que son compartidos por muchos
componentes de QM y los aprenderá con bastante rapidez.
QM también es compatible con un segundo sistema de edición de comandos
basado en comandos con prefijo por un punto (.) Para compatibilidad con
otros productos de MultiValor. Por ejemplo, escribir .L en el símbolo del
sistema le mostrará una lista de los 20 comandos más recientes. Para obtener
más detalles, consulte el QM Reference Manual.
Paginación
A medida que continúe usando QM, notará que los comandos que producen
más de una página de salida muestran un mensaje de continuación al final de
cada página. Para el procesador de consultas, las opciones disponibles pueden
variar. Para otros comandos, las opciones son:
A Abortar el procesamiento y regresar al símbolo del sistema,
posiblemente ejecutando el párrafo [Link] descrito más
adelante.
Q Salga del comando y continúe procesando.
S Suprima la paginación, continuando sin más indicaciones de
paginación. Esto es útil cuando se captura la salida localmente con el
emulador de terminal.
Cualquier otra tecla continúa procesando.
Cancelación de Comandos
Algunas veces tenemos que terminar el procesamiento porque algo no está
funcionando como se esperaba. Podemos hacer esto con la tecla de
interrupción, que generalmente es Ctrl-C, pero puede moverse. Al presionar
esta tecla aparece una lista de opciones, algunas de las cuales hacen cosas que
aún tenemos que debatir:
A Aborto. Vuelve al símbolo del sistema exactamente de la misma
manera que un aborto generado por una instrucción ABORT en un
programa QMBasic o un comando ABORT en un párrafo. El párrafo
[Link] se ejecuta, si está presente. La lista de selección
predeterminada (lista 0) se borrará si estuviera activa.
D Solo se ofrece cuando corresponde, esta opción ingresa al depurador
de QMBasic.
G Ir. Continúa procesando desde donde fue interrumpido. Si el terminal
admite las operaciones necesarias, QM restaurará la imagen de
visualización para eliminar el prompt.
P Crea un archivo de volcado de proceso y continúa la ejecución.
Q Salir Devuelve desde el comando actual al párrafo, menú, programa o
símbolo del sistema que inició el comando. El párrafo [Link]
no se ejecuta. La lista de selección predeterminada (lista 0) no se
borra.
S Stack. Muestra el stack de llamadas que muestra el nombre y la
ubicación del programa para cada entrada.
W Donde. Muestra el nombre y la ubicación del programa actual.
X Salir. Aborta totalmente de QM sin ejecutar el párrafo [Link].
Esta opción solo se debe usar si QM parece tener un comportamiento
incorrecto.
Tenga en cuenta que las aplicaciones a menudo se ejecutan con la clave de
interrupción deshabilitada en entornos activos para mayor seguridad.
Opciones de compatibilidad
Si se está moviendo a QM desde otro entorno MultiValor, puede
encontrar que aunque QM es esencialmente similar al entorno del que
proviene, tiene algunas diferencias significativas. QM sigue en líneas
generales el modelo de "Estilo Information" pero tiene opciones para
permitir una compatibilidad más estrecha con otros sistemas. Para obtener
más información, consulte el comando OPTION y la directiva del
compilador $MODE en el QM Reference Manual. Excepto donde se
indique específicamente, este curso usa QM en sus configuraciones
predeterminadas.
3.- El Sistema de Archivos QM
Una aplicación QM almacena sus datos en archivos (algunos usuarios
llaman a estas tablas), cada uno de las cuales generalmente tiene un
diccionario correspondiente que describe el archivo de datos. Para los
propósitos de esta sección, un diccionario es solo un archivo con un
propósito especial. (Puede haber venido de un entorno de base de datos que
almacena un esquema que proporciona una vista de toda la base de datos.
En una base de datos MultiValor, cada archivo tiene su propio diccionario
que describe el contenido del archivo y su relación con otros archivos).
QM tiene dos tipos de archivos que ofrecen diferentes características y son
apropiados para diferentes usos en el software de la aplicación. Los
Archivos de Directorio no ofrecen un alto rendimiento, pero permiten que
los datos se visualicen o modifiquen desde fuera del entorno de QM. Por lo
tanto, se utilizan con frecuencia para el intercambio de datos con otro
software. Los Archivos Dinámicos ofrecen un rendimiento muy alto, pero
no se puede acceder desde fuera de QM. Normalmente se usan para la
mayor parte de los datos almacenados por una aplicación.
En la mayoría de los casos, al software de aplicación no le importa qué tipo
de archivo se utiliza.
Creando y borrando archivos
Los archivos se crean utilizando el comando [Link]. En su forma
más simple, esto es
[Link] nombre
para un Archivo Dinámico o
[Link] nombre DIRECTORY
para un Archivo de Directorio. Hay opciones adicionales discutidas en el
QM Reference Manual que permiten crear el archivo en una ubicación no
predeterminada o modificar los detalles de configuración para un archivo
dinámico. En la mayoría de los casos, estos pueden ser omitidos.
El componente de nombre es el nombre que se utilizará para referenciar el
archivo dentro de QM. Esto no debe existir ya como un registro en el
archivo VOC. Los nombres de archivo utilizados por una aplicación deben
elegirse para que sean significativos, pero no tan largos, que se conviertan
en una molestia al escribirlos. El nombre puede estar formado por
cualquier carácter imprimible, pero no debe contener espacios. Se creará un
directorio del sistema operativo para representar el archivo y este tendrá el
mismo nombre que el archivo QM a menos que este no sea un nombre de
archivo de sistema operativo válido. En este caso, QM fabrica un nombre
de archivo de sistema operativo válido basado en una traducción
automática del nombre utilizado en el comando. Desde dentro de QM, no
necesita saber acerca de esta traducción.
Un archivo normalmente tiene dos partes; una parte de datos que contiene
los datos de la aplicación y una parte del diccionario que contiene una
definición de la estructura de los registros de datos. El diccionario también
establece acciones predeterminadas para el procesador de consultas.
El comando [Link] normalmente crea los datos y las partes del
diccionario del archivo. El nombre del sistema operativo para el
diccionario es el mismo que el nombre de la porción de datos pero con un
sufijo de .DIC agregado. Una descripción predeterminada de la ID de
registro llamada @ID se agrega automáticamente al diccionario y puede
modificarse, pero no debe eliminarse. Un desarrollador de aplicaciones
normalmente agregará entradas de diccionario para describir cada campo
del registro de datos.
Es posible crear un archivo de datos que no tenga diccionario prefijando el
nombre con DATA. Esto podría usarse si, por ejemplo, el archivo contiene
texto no estructurado simple en lugar de ser una tabla de base de datos con
campos definidos. Por ejemplo:
[Link] DATA PROGRAMS
Del mismo modo, la palabra clave DICT se puede usar para crear solo un
diccionario. Un diccionario que no tiene ningún archivo de datos
probablemente no tenga sentido, pero esta forma del comando
[Link] se puede usar para agregar un diccionario a un archivo
creado previamente sin uno. Por ejemplo, un diccionario podría agregarse
más tarde al archivo PROGRAMS creado anteriormente usando
[Link] DICT PROGRAMS
Si está migrando a QM desde otro producto de base de datos MultiValor,
es posible que esté familiarizado con archivos múltiples. Se pueden
considerar como un conjunto de archivos de datos con estructura idéntica
que comparten un diccionario común. Un uso típico de estos podría ser
dividir una base de datos de clientes en regiones comerciales. QM tiene
soporte completo para archivos múltiples, pero no los discutiremos en
detalle en este curso.
El comando [Link] se utiliza para eliminar un archivo. La
sintaxis de este comando es
[Link] nombre
Nuevamente, el nombre puede ser prefijado por DATA o DICT para
eliminar solo una parte del archivo. Tenga en cuenta que una vez que se ha
eliminado un archivo, la única manera de recuperarlo es restaurarlo desde
una copia de seguridad.
El comando [Link] solicitará la confirmación si el nombre de
ruta del sistema operativo del archivo como está registrado en el VOC no
es el predeterminado que usaría [Link]. Esto ayuda a evitar la
eliminación accidental de archivos en otras cuentas.
Archivos de Directorio
Estos son muy simples Lo que el usuario de QM ve como un archivo de
base de datos está representado por un directorio de sistema operativo. Los
registros dentro de ese archivo están representados por archivos de texto en
el directorio.
QM Sistema operativo
Archivo Directorio
Registro Archivo de texto
Esta estructura permite el acceso a los registros almacenados en el archivo
QM desde fuera de QM, pero no brindará un alto rendimiento porque el
proceso de búsqueda en un directorio es esencialmente un escaneo lineal.
Los Archivos de Directorio también se utilizan ampliamente para
almacenar registros muy grandes (quizás más de 100kb para un solo
registro) ya que las estructuras de archivos del sistema operativo están
optimizadas para tamaños muy grandes, mientras que los archivos de hash
de alto rendimiento están optimizados para tamaños más pequeños.
Almacenar registros muy pequeños en archivos de directorio puede ser
ineficiente ya que algunos sistemas operativos asignan espacio en
fragmentos grandes, tal vez tan grandes como 32kb, lo que resulta en un
registro de solo unos pocos bytes que requiere una gran cantidad de espacio
en el disco.
El archivo de texto creado para representar cada registro tendrá el mismo
nombre que el ID de registro a menos que contenga caracteres que no son
válidos en los nombres de los archivos del sistema operativo. En este caso,
QM aplica una traducción automática para generar un nombre válido.
Tenga en cuenta que en los sistemas Windows, los nombres de los
archivos no distinguen entre mayúsculas y minúsculas y, por lo tanto, no es
posible almacenar dos registros en un archivo de directorio con
identificadores que difieren solo en la cubierta.
Debido a que los Archivos de Directorio se utilizan con frecuencia para
intercambiar datos con otro software que puede no comprender el modelo
de datos MultiValor, los datos escritos en un archivo de directorio tienen
marcas de campo reemplazadas por líneas nuevas. El efecto de esto es que
cuando el registro se ve desde fuera de QM con un editor de archivos del
sistema operativo, etc., cada campo aparece como una línea de texto
separada. Los caracteres de marca de nivel inferior (marcas de valor,
marcas de subvalor y marcas de texto) no se ven afectados porque la
exportación de datos MultiValor implica que el software que lo leerá debe
comprender MultiValor. La transformación inversa ocurre cuando se lee
desde un archivo de directorio, reemplazando las líneas nuevas por marcas
de campo.
El posible problema con esta transformación de datos es que los registros
que contienen datos binarios, como las imágenes de mapa de bits
(documentos escaneados, fotografías digitales, etc.) pueden corromperse si
se almacenan en archivos de directorio. Tales datos pueden contener
cualquier patrón de bytes. Cuando se escriben los datos, todas las marcas
de campo se convierten en nuevas líneas. Cuando vuelve a leerse, todas las
líneas nuevas, incluidas las que estaban en los datos originales, se
convierten en marcas de campo. Los programadores pueden usar la
instrucción [Link] para suprimir esta asignación como se
describe en las secciones de programación de QMBasic de este curso.
Los Archivos de Directorio a veces se usan para importar o exportar
registros muy grandes. Estos podrían, quizás, consistir en muchos miles de
líneas de texto. Aunque un programador puede tratar el archivo como un
registro de base de datos y acceder al ítem completo en una sola operación,
el lenguaje de programación QMBasic le permite a la aplicación leer o
escribir el ítem línea por línea. Esto no es posible con archivos dinámicos
y, por lo tanto, los programas escritos para usar esta característica no
funcionarán con archivos dinámicos. Hay más sobre esto en la sección que
analiza el procesamiento de archivos secuencial de QMBasic.
Aunque son muy simples y no ofrecen alto rendimiento, todas las
aplicaciones incluyen el uso de Archivos de Directorio. Algunos de los
elementos estándar de QM usan Archivos de Directorio.
Archivos dinámicos
Los Archivos Dinámicos de QM usan una técnica matemática llamada
hash para optimizar el rendimiento. Aunque no necesita comprender esto
para usar QM, una breve descripción puede ser útil. Puede omitir esto si no
es de su interés.
Para entender el hashing, olvidemos las computadoras por un tiempo y
consideremos una simple analogía.
Imagínese que entras en una biblioteca para encontrar un libro escrito por
Fred Smith y que la biblioteca (que aún no está al nivel de la tecnología)
tiene un gran armario con índices de tarjetas de madera. ¿Qué haces?
Lo que ciertamente no hace es abrir el cajón con la etiqueta A, escanear
todas las tarjetas, pasar al cajón etiquetado B y así sucesivamente.
Claramente, irías directamente al cajón correcto. En nuestro modelo de
computadora, necesitamos una manera similar de ir directamente a la parte
pequeña de la base de datos donde esperamos que se guarde el registro.
El segundo problema es que, si miraras todos los cajones, algunos tendrían
muchas cartas, mientras que otros podrían estar casi vacíos. No hay
muchos autores con nombres que comiencen con X, por ejemplo. Esto
significa que el gabinete de índice de la tarjeta contiene espacio
desperdiciado. En nuestro modelo de computadora, nos gustaría minimizar
el espacio desperdiciado al garantizar que la distribución de registros sea lo
más pareja posible. Probablemente no sea aceptable que nos digan que la
biblioteca ha reducido el espacio desperdiciado clasificando el catálogo del
autor en la tercera letra del nombre del autor, pero podemos hacer lo que
sea conveniente para nosotros.
Finalmente, a medida que la biblioteca crezca, llegará un momento en que
comprarán un nuevo libro, escribirán la tarjeta y descubrirán que no cabe
en el cajón. Así como una biblioteca no va a decir que no pueden
almacenar un libro porque la tarjeta no cabe en el cajón, entonces en
nuestro sistema informático necesitamos una manera de almacenar un
registro en otro lugar si no va a donde debería ir.
Entonces, ¿cómo funciona todo esto en el modelo de computadora?
Un archivo hash se compone de una serie de áreas de tamaño idéntico
llamadas grupos, análogas a los cajones del armario índice de tarjeta. La
cantidad de grupos en un archivo se conoce como el módulo (o módulo).
En QM, un grupo puede tener un tamaño de 1 a 8 kb y puede haber hasta
2147483647 grupos en un archivo (es decir, un máximo de 16 terabytes,
mucho más que suficiente incluso para la aplicación más compleja).
Un archivo de datos real tendría muchos grupos, quizás miles o incluso
cientos de miles. El propósito de dividir el archivo en grupos es permitir
que la posición en la que existe un registro determinado se determine
matemáticamente y, por lo tanto, permitir que el registro se lea con el
mínimo de búsqueda. A los efectos de esta explicación, considere un
archivo que tiene un módulo de solo 5.
Queremos insertar un nuevo registro con id 102. Necesitamos un sistema
mediante el cual la identificación del registro se pueda transformar en un
número de grupo y eso le dará una distribución razonablemente pareja de
los registros en todo el archivo. Probablemente el sistema más simple sería
dividir la identificación del registro (102) por el módulo (5) y usar el resto
de esta división más uno como número de grupo. Por lo tanto, el registro
102 debe colocarse en el grupo 3.
Algún tiempo después, llegamos a leer el registro 102. Aplicando la misma
transformación a la identificación del registro, sabemos que este registro
pertenece al grupo 3. Podemos leer este grupo del disco y buscar a través
de él. Si encontramos el registro 102, el trabajo está hecho; si no
encontramos el registro, no está en el archivo y no necesitamos leer ningún
otro grupo.
Si el tamaño del grupo puede ser lo suficientemente pequeño, podemos leer
cualquier registro con una sola transferencia de disco. Claramente, no es
posible obtener un mejor rendimiento que este. Tenemos el sistema de
archivos más rápido del mundo. Desafortunadamente, en el mundo real las
cosas no funcionan del todo bien, pero, como veremos, deberíamos ser
capaces de acercarnos a esta actuación.
Es probable que un archivo de datos real tenga identificadores de registros
no numéricos, de modo que la transformación anterior sea una
simplificación excesiva de lo que realmente hace QM. Internamente, QM
realiza un cálculo basado en los valores ASCII de los caracteres en la
identificación del registro para formar un gran número y luego sigue el
procedimiento descrito anteriormente de dividir por el módulo y usar el
resto más uno como número de grupo.
Si el proceso de hash funciona bien, los registros deben distribuirse
razonablemente uniformemente en todo el archivo, lo que da como
resultado un archivo como el siguiente, donde la parte gris de cada grupo
representa el espacio utilizado.
Siempre habrá algunas irregularidades en el empaque. El grupo 5 anterior
solo está medio lleno mientras que el grupo 3 está casi completamente
lleno. ¿Qué sucede si tratamos de agregar más datos al grupo 3 y no
encajará? No es aceptable decir que no podemos almacenar un registro
porque no encaja donde debería ir. En su lugar, agregamos un nuevo
bloque de disco al final del grupo completo.
Se dice que el Grupo 3 en el diagrama de arriba está desbordado. Es
posible que el bloque de desbordamiento se desborde. En tales casos, se
dice que el grupo afectado está muy desbordado. Esto podría progresar
hasta el punto en que un grupo tenga muchos bloques de desbordamiento
conectados, aunque esto es poco probable.
El desbordamiento debe minimizarse ya que afecta el rendimiento y
también aumenta el riesgo de daños en el archivo en caso de falla del
sistema al escribir un grupo en el disco. Los Archivos Dinámicos se
denominan así porque hay un algoritmo incorporado que ajusta el valor del
módulo para responder a los cambios en el volumen de datos almacenados
en el archivo. El efecto de esto es mantener el desbordamiento dentro de un
rango aceptable sin la necesidad de ninguna herramienta de administración
del sistema.
Un Archivo Dinámico recién creado normalmente solo tiene un grupo.
Durante la operación del archivo, QM rastrea el valor de carga del archivo
(el volumen de datos como un porcentaje del espacio asignado para los
grupos, promediado sobre todo el archivo). Cuando este valor excede el
porcentaje de carga dividida, se agrega un nuevo grupo. Como resultado de
esto, algunos datos en el archivo pueden necesitar ser movidos al nuevo
grupo. Agregar un grupo tendrá el efecto de disminuir el valor de carga
porque el tamaño del archivo ha aumentado.
De forma similar, si el valor de carga cae por debajo del porcentaje de
carga de fusión, se elimina el grupo final del archivo, moviendo sus
registros de datos a uno de los grupos restantes.
El efecto de dividir y fusionar es ajustar el módulo en respuesta a los
cambios en el volumen de datos de forma que el archivo permanezca
razonablemente empaquetado y, por lo tanto, funcione bien.
Un Archivo Dinámico realista todavía tendrá desbordamiento aunque el
proceso de división y fusión tiende a minimizar esto. Para permitir el
desbordamiento en un archivo que también debe poder ajustar su valor de
módulo, un Archivo Dinámico se representa mediante un directorio de
sistema operativo que contiene dos archivos que almacenan los grupos
primarios (% 0) y bloques de desbordamiento (% 1) por separado. Los
archivos están interconectados por punteros entre los almacenamientos
intermedios de grupo y siempre se deben copiar o restaurar juntos. Puede
haber elementos adicionales (% 2, % 3, etc.) si el archivo utiliza el sistema
de índice de claves alternativas de QM.
Cuando se usa para crear un Archivo Dinámico, el comando
[Link] tiene varios parámetros opcionales. Por lo general, es
suficiente omitir todos estos, dejando todo en su valor predeterminado.
[Link] n Especifica el tamaño del grupo en múltiplos de 1024
bytes. Aunque este parámetro puede tener cualquier
valor entre 1 y 8, el mejor rendimiento se obtiene con
1, 2, 4 u 8.
[Link] n Un archivo dinámico creado con este
parámetro nunca se contraerá por debajo del número
de grupos dado. Este parámetro puede ser útil para
evitar divisiones y fusiones excesivas de un archivo
pequeño si los registros se agregan y eliminan con
frecuencia o para pre-asignar el espacio en disco.
[Link] n El porcentaje de carga dividida determina el valor de
la carga a la que se agrega un nuevo grupo al
archivo. El valor predeterminado de 80 funciona bien
para la mayoría de los archivos y se debe cambiar
solo con sumo cuidado.
[Link] n El porcentaje de carga de fusión determina la carga
[Link] n Especifica el tamaño del grupo en
múltiplos de 1024 bytes. Aunque este parámetro
puede tener cualquier valor entre 1 y 8, el mejor
rendimiento se obtiene con 1, 2, 4 u 8.
[Link] n Un archivo dinámico creado con este
parámetro nunca se contraerá por debajo del número
de grupos dado. Este parámetro puede ser útil para
evitar divisiones y fusiones excesivas de un archivo
pequeño si los registros se agregan y eliminan con
frecuencia o para preasignar el espacio en disco.
[Link] n El porcentaje de carga dividida determina el valor de
la carga a la que se agrega un nuevo grupo al
archivo. El valor predeterminado de 80 funciona bien
para la mayoría de los archivos y se debe cambiar
solo con sumo cuidado.
[Link] n El porcentaje de carga de fusión determina la carga.
Sensibilidad de mayúsculas
Con la excepción de los archivos de directorio en Windows, los
identificadores de registros en archivos QM generalmente distinguen entre
mayúsculas y minúsculas. La opción [Link] para [Link] crea
un archivo con identificadores de registro que no distinguen entre
mayúsculas y minúsculas. Un buen ejemplo del uso de identificadores de
registros que no distinguen entre mayúsculas y minúsculas es para los
archivos que usan direcciones de correo electrónico como clave de registro.
La mayoría de los proveedores de servicios de correo los consideran
insensibles a las mayúsculas y minúsculas, por lo que tendrían que hacer lo
mismo.
4.- Editando Datos
A medida que avanzamos en los ejercicios de este curso, deberá editar los
registros en varios archivos, a veces para agregar nuevos elementos, a
veces para modificar lo que ya están allí. QM incluye varias herramientas
de edición que se pueden usar para crear y modificar datos. En este módulo
veremos brevemente las características más importantes del Editor de
Línea de QM, ED, y el Editor de Pantalla Completa SED. Hay mucho más
que aprender sobre estos dos elementos en el QM Reference Manual,
especialmente el SED, que tiene muchas características específicamente
destinadas a los desarrolladores de aplicaciones.
Necesitamos crear algunos datos de prueba que pueda usar mientras
explora los editores. Para hacer esto, escribe
SORT NEWVOC CSV TO TEST FIRST 100
No te preocupes por lo que esto realmente hace. Simplemente acepte que
ahora tiene un registro llamado TEST en un archivo llamado $ACC (que
en realidad es su directorio de cuenta visto como un archivo de directorio).
Puede usar este registro para probar los comandos del editor descritos en
esta sección. No importa cuánto destruyas estos datos porque no los
usaremos en otro lugar. Siempre puede repetir el comando anterior para
volver a crear los datos más tarde, pero le pedirá confirmación antes de
sobrescribir la versión anterior.
El Editor de Línea ED
En un editor de línea, el registro que se está editando se procesa línea por
línea, donde cada línea corresponde a un campo en el registro de datos.
Aunque este es un estilo de editor bastante anticuado, resulta ser muy
apropiado para algunas de las cosas que harás con QM.
Las primeras bases de datos MultiValor solo tenían un editor de línea. ED
es estrechamente compatible con sus equivalentes en algunos otros
productos (¡y molestamente no es lo mismo que algunos otros!). Los
programadores generalmente prefieren un editor de pantalla completa
como SED.
El formato del comando ED es
ED {DICT} [Link] {[Link]}
dónde
DICT indica que los registros de la porción del diccionario del archivo
deben ser editados.
[Link] es el nombre del archivo que contiene los registros que se
editarán.
[Link] es el nombre del registro que se editará.
También es posible proporcionar a ED una lista de registros para editar a
través de la lista de selección predeterminada, un concepto que
discutiremos como parte del procesador de consultas. Si no se especifica
[Link] y la lista de selección predeterminada está activa, esta lista se usa
para identificar los registros que se editarán.
Si no se especifica [Link] y la lista de selección predeterminada no está
activa, el comando ED solicita el registro.
Un [Link] de * en la línea de comando hará que ED seleccione todos los
registros del archivo y edite cada uno por turno.
QM incluye un mecanismo de bloqueo para evitar interacciones no
deseadas entre usuarios. El editor mantiene un bloqueo de actualización en
el registro que se está editando para que cualquier otro usuario que intente
modificar el mismo registro espere a que se libere el bloqueo o informe un
error. El bloqueo se analiza en detalle como parte de las secciones de
programación de este curso.
Si va a probar los comandos del editor mientras lee esta sección, escriba
ED $ACC TEST
El editor responde mostrándole cuántas líneas (campos) hay en el registro y
luego muestra un símbolo del sistema.
Comandos del editor
Cada línea ingresada desde el teclado contiene un comando de editor. Los
nombres de los comandos no distinguen entre mayúsculas y minúsculas,
pero la información de calificación puede ser sensible a mayúsculas y
minúsculas según el comando y los modos actuales del editor. Los
comandos que toman información calificada que especifica su función
exacta generalmente pueden repetirse ingresando solo el nombre del
comando, llevando adelante los calificadores del uso previo del mismo
comando dentro de la misma sesión del editor. Veremos ejemplos de esto
cuando comencemos a explorar el conjunto de comandos del editor.
El editor mantiene el concepto de una posición actual (número de línea)
dentro de los datos. En la entrada al editor, esto está por encima de la
primera línea. Se proporcionan comandos para mover la posición actual a
una línea específica o buscando. Muchos de los comandos del editor
moverán la posición actual como resultado de su acción.
El editor funciona en dos modos; editar y entrada. El modo de edición
acepta comandos para moverse dentro del texto del registro, para realizar
cambios en los datos u otras acciones. En el modo de entrada, se ingresan
nuevos datos en el registro. El editor numera las líneas de uno y el número
de línea se muestra como un número de cuatro dígitos seguido de dos
puntos cada vez que se muestran líneas o durante la entrada. El símbolo del
sistema del editor es cuatro guiones seguidos de dos puntos. (Si el registro
que se está editando tiene más de 9999 líneas, el número de línea y el
ancho de la solicitud se ajustan para que quepan).
Si se debe ingresar un carácter que no sea de impresión, se puede escribir
como ^ nnn donde nnn es el valor decimal del carácter dentro del conjunto
de caracteres ASCII. Por ejemplo, aunque puede haber una combinación de
teclas en su teclado para enviar un carácter de marca de valor, esto siempre
se puede ingresar como ^253. El único personaje que no se puede ingresar
de esta manera es la marca de campo (carácter 254) ya que el editor trata
cada campo como una línea de texto separada.
Comandos de posicionamiento
Los comandos enumerados a continuación alteran la posición de la línea actual.
Al ingresar una línea en blanco en el símbolo del sistema avanza la posición actual en
una línea, mostrando la línea recién seleccionada. Si está probando el editor al leer
esto, presione la tecla de retorno varias veces y observe cómo esto lo hace descender a
través de los datos, mostrando cada línea a medida que avanza. Avanza hasta la última
línea (el editor te dirá cuándo llegues allí) y observa que si presionas la tecla volver de
nuevo, vuelves a la parte superior. Luego prueba cada uno de los siguientes
comandos:
T
El comando T (arriba) se mueve antes de la línea 1. No hay una línea actual
después de esta acción.
B
El comando B (abajo) se mueve a la última línea del registro.
n
Al ingresar un número en el símbolo del sistema, se coloca la línea actual en la
línea n.
+n
Mueve la posición actual de la línea hacia adelante en n líneas.
-n
Mueve la posición actual de la línea hacia atrás en n líneas.
L{string}
El comando L (localizar) avanza a la siguiente línea que contiene una cadena
que debe estar precedida por un espacio simple. Cualquier espacio adicional se
tratará como parte de la cadena que se ubicará. El comando L distingue entre
mayúsculas y minúsculas por defecto. Escriba:
CASE OFF
hace que las búsquedas sean insensibles para el resto de la sesión de edición.
Consulte la descripción de ED en el Manual de Referencia de QM para
descubrir cómo hacer que el editor sea insensible por defecto.
Si se omite la cadena, se utiliza la cadena utilizada por el comando L más
reciente. Si no hay comando L se ha ejecutado, el editor avanza en una línea.
Mostrando texto
Hay dos comandos principales para mostrar texto:
P{n}
El comando P (imprimir) muestra n líneas comenzando en la línea actual,
moviendo la línea actual hacia adelante a la línea visualizada final. El valor de
n se establece de manera predeterminada en 23 en el primer uso del comando P
y en el valor de n para el comando P ejecutado más recientemente a partir de
ese momento. No debe haber espacio entre P y n.
PP{n}
El comando PP (posición de impresión) muestra n líneas que rodean la posición
actual de la línea. El valor de n se establece de manera predeterminada en 21 en
el primer uso del comando PP y en el valor de n para el comando PP ejecutado
más tarde a partir de ese momento. No debe haber espacio entre PP y n.
Insertar Texto
I{text}
El comando I (insertar) inserta texto después de la línea actual, convirtiéndola
en la línea actual. Debe haber un espacio único antes del texto. Cualquier
espacio adicional se trata como parte del texto insertado. Para insertar una
línea en blanco escriba "I" seguido de un solo espacio.
Si el comando I se ingresa sin texto y sin espacio después de I, el editor
ingresa al modo de entrada. Le pedirá líneas sucesivas hasta que se ingrese
una línea en blanco, en cuyo punto regresará al modo de edición. Al ingresar a
una línea que contiene solo un espacio, se inserta una línea en blanco.
Eliminar Lineas
D{n}
El comando Dn (eliminar) elimina n líneas comenzando en la posición de la
línea actual. Si n no se especifica, solo se borrará la línea actual. Tenga en
cuenta que el calificador numérico opcional es el número de líneas para
eliminar, no la línea que se eliminará.
Editar la línea actual
A{string}
El comando A (adjuntar) agrega una cadena a la línea actual. Un solo espacio
debe separar una cadena del comando. Cualquier espacio adicional se trata
como parte del texto insertado.
Si se omite la cadena, se repite el comando A más reciente.
C/[Link]/[Link]/{n} {G}
El comando C (cambio) cambia la primera aparición de [Link] a [Link]
en la línea actual. El delimitador alrededor de las cadenas puede ser cualquier
carácter que no sea una letra, un dígito, un espacio o un signo de interrogación.
El componente n opcional especifica que se deben cambiar n líneas que
comienzan en la línea actual.
G hace que todas las ocurrencias de [Link] en la(s) línea(s) que se están
procesando sean reemplazadas. Sin G solo se cambia la primera aparición en la
línea.
Al ingresar a C sin cadenas, se repite la última sustitución.
R{text}
El comando R (reemplazar) reemplaza la línea actual con el texto especificado.
Debe haber un espacio único antes del texto. Cualquier espacio adicional se
trata como parte del texto de reemplazo. Al ingresar R sin más caracteres, se
repite la última operación de reemplazo.
Comandos misceláneos
^
Alterna el modo de expansión de caracteres sin impresión. Cuando este modo
está habilitado, los caracteres que no se imprimen se muestran como ^ nnn
donde nnn es el número de carácter decimal. Una marca de valor, por ejemplo,
aparecería como ^ 253.
Help Tópico
El comando HELP muestra una breve descripción asociada con el comando
identificado por tema.
OOPS
El comando OOPS deshace la función más reciente que modificó el registro en
la sesión de edición actual. Solo es posible retroceder un paso de esta manera.
XEQ Comando
El comando XEQ ejecuta el comando especificado que puede ser cualquier
comando QM válido
Comandos de manejo de archivos y salir del editor
FILE {{filename} [Link]}
Si no se incluyen argumentos, el comando File (que puede abreviarse a FI)
escribe el registro que se está editando nuevamente en su ubicación original.
Si se especifica [Link], el registro modificado se guarda con el nuevo
nombre. Un mensaje de confirmación se emitirá aun si ya existe un registro de
ese nombre.
Si se proporcionan tanto filename como [Link], el registro se guarda en el
archivo especificado y se graba. De nuevo, se emitirá un mensaje de
confirmación si ya existe un registro de este nombre.
Después de guardar el registro, se libera el bloqueo de la actualización de
registro y el editor finaliza, continúa con el siguiente registro de una lista de
selección o solicita una nueva identificación de registro según la forma en que
se ingresó.
QUIT
El comando QUIT (que puede abreviarse como Q) libera el bloqueo de
actualización de registro y deja el editor sin guardar ningún cambio realizado en
el registro. Se emite un mensaje de confirmación si hay cambios no guardados.
El comando QUIT termina la edición del registro actual. Si una lista de
selección está en uso, el editor pasará al siguiente registro. Utilice el comando
X que se describe a continuación para finalizar la edición completa en este
caso.
X
El comando X aborta una edición cuando una lista de selección está en uso sin
guardar ningún cambio realizado en el registro. Se emite un mensaje de
confirmación si hay cambios no guardados. Cualquier entrada adicional en la
lista de selección se descarta y el editor finaliza.
El editor contiene muchos otros comandos que no se describen en esta breve
descripción general. Consulte el Manual de Referencia de QM o el texto de ayuda
del editor para obtener más información.
El editor de pantalla completa SED
Un editor de pantalla completa muestra una página de datos del elemento que se está
editando y le permite al usuario moverse a través de él con las teclas del cursor u otros
códigos de control. El editor SED se basa en el editor EMACS estándar de la
industria, pero incluye muchas extensiones estrechamente vinculadas al entorno QM.
Esta descripción general introducirá solo un pequeño subconjunto de las
características del editor, suficiente para comenzar utilizando QM.
El formato del comando SED es
SED {DICT} [Link] {[Link]}
dónde
DICT indica que los registros de la porción del diccionario del archivo
deben ser editados.
[Link] es el nombre del archivo que contiene los registros que se editarán.
[Link] es el nombre del registro que se editará.
SED se comporta exactamente de la misma manera que ED con respecto al uso de
listas de selección o la solicitud de ID de registro. Los registros que se procesan están
bloqueados para evitar interacciones no deseadas con otros usuarios.
Para explorar SED, edite el registro de prueba que creó al comienzo de esta sección:
SED $ACC TEST
La pantalla mostrada por este comando muestra el inicio del artículo que se está
editando. Hay un área de estado de dos líneas en la parte inferior de la pantalla que
identifica el registro que se está editando, su tamaño, la posición actual de la línea y
columna y varios indicadores de estado del editor.
Para moverse en los datos, use las teclas del cursor. Puede modificar los datos
simplemente escribiendo nuevos caracteres para insertar o usando las teclas borrar o
retroceder para eliminar datos.
El editor tiene muchas funciones especiales. Algunas son combinaciones de teclas de
control ingresadas manteniendo presionada la tecla Ctrl mientras se escribe una letra
(representada en la documentación como,
El editor tiene muchas funciones especiales. Algunas son combinaciones de teclas de
control ingresadas manteniendo presionada la tecla Ctrl mientras se escribe una letra
(representada en la documentación como, por ejemplo, Ctrl-G). Otros son prefijados
mediante el uso de la tecla Escape sin mantenerlo presionado (representado, por
ejemplo, Esc-X) y algunos implican secuencias más complejas como Ctrl-X seguido
de C (representado como Ctrl-X C).
Las únicas funciones que necesita saber para comenzar con este editor son
Ctrl-XS Guarda los datos actuales en el archivo
Ctrl-XC Cerrar (salir de) el editor
En lugar de tratar de aprender todas las funciones SED y sus enlaces de teclas de una
sola vez, intente aprender algunas a la vez y acostúmbrese a usarlas. Otros útiles para
aprender pronto son:
Ctrl-A Mueve el comienzo de la línea
Ctrl-E Mover al final de la línea
Ctrl-G Cancelar una entrada de tecla de función parcialmente completada
Ctrl-V Bajar una pantalla
Esc-V Subir una pantalla
Esc- < Mover a la parte superior de los datos
Esc-> Mover al final de los datos
Hay muchas características poderosas sobre las que aprender luego leyendo la sección
relevante del Manual de Referencia de QM. SED tiene algunas funciones de corte y
pegado muy buenas para reorganizar los datos y puede trabajar en múltiples registros
en una sola sesión de edición.