User Tools

Site Tools


opac.bat

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
opac.bat [05/05/2009 00:00]
opac.bat [05/05/2009 18:40]
fernando
Line 1: Line 1:
 +====== Script opac.bat ======
  
 +<note warning>
 +**OBSOLETO**
 +</​note>​
 +
 +
 +<code dos>
 +@echo off
 +
 +:: ===================================================================
 +:: OPAC.BAT
 +::
 +:: Este script genera el conjunto de archivos utilizados en el OPAC.
 +::
 +:: Requiere utilitarios CISIS: mx, msrt, i2id, id2i. Para conversión
 +:: de las bases a Linux, necesita crunchmf y crunchif.
 +::
 +:: Opciones de configuracion:​
 +::          path del cipar
 +::          path de los utilitarios CISIS
 +::          conversion de bases a Linux
 +::
 +:: La base de origen debe tener la codificacion "​ANSI"​. Las bases
 +:: creadas con Catalis ya traen esa codificacion.
 +::
 +:: Usamos "​seq=filename.id¦"​ para que el poco probable
 +:: caracter '​¦'​ sea tomado como delimitador de campos (y, en
 +:: consecuencia,​ no tengamos separacion en campos). Quizas
 +:: convenga emplear otro caracter? Revisar.
 +::
 +:: ATENCION: como hacemos si los registros ya vienen con ^9 en los
 +:: campos de encabezamientos?​
 +::
 +:: TO-DO: reescribir esto como un script Bash para Linux.
 +::
 +:: TO-DO: Necesitamos medir el tiempo de ejecucion del script, y
 +:: revisar de manera general su diseño, porque es bastante lento
 +:: (en un Pentium III)
 +:: 
 +:: (c) 2003-2004 Fernando J. Gomez - CONICET - INMABB
 +:: ===================================================================
 +
 +
 +:: CONFIGURACION
 +set CONVERT_LINUX=1
 +
 +:: CONFIGURACION
 +:: Agregamos al PATH el directorio de los utilitarios CISIS
 +set PATH=%PATH%;​D:​\cisis
 +
 +:: Parametros obligatorios (base de origen y directorio destino)
 +if .%1==. goto SYNTAX
 +if .%2==. goto SYNTAX
 +
 +cls
 +
 +:: CONFIGURACION
 +:: Hay que usar el path *absoluto* para el cipar
 +set CIPAR=D:​\opac\opac.cip
 +if not exist %CIPAR% goto ERROR_CIPAR
 +echo Archivo cipar encontrado.
 +
 +:: Verificamos la existencia de la base de origen
 +if not exist %1.mst goto ERROR_DB_ORIGIN
 +if not exist %1.xrf goto ERROR_DB_ORIGIN
 +echo Base de origen encontrada.
 +
 +
 +:: Creamos el directorio destino, si es necesario
 +:: ATENCION: en Win2K a veces genera un error, sin razon aparente. Hay que reintentar,
 +:: o bien hacer un cd al directorio %2 seguido de un cd.. para regresar
 +if not exist %2\nul mkdir %2
 +if errorlevel 1 goto ERROR_MKDIR
 +echo Directorio %2 creado.
 +
 +if not exist %2\tmp\nul mkdir %2\tmp
 +if errorlevel 1 goto ERROR_MKDIR_TMP
 +echo Directorio %2\tmp creado.
 +
 +
 +:​BIBLIO_DATABASE_1
 +
 +echo.
 +echo Creamos una copia (texto) de la base bibliografica.
 +set MAXCOUNT=30000
 +if not %3.==. set MAXCOUNT=%3
 +i2id %1 count=%MAXCOUNT% tell=1000 > %2\tmp\biblio1.id
 +
 +:: A partir de ahora, trabajamos en el directorio destino
 +cd %2
 +::if errorlevel 1 goto ERROR_CHANGE_DIR
 +echo.
 +echo Directorio de trabajo: %2
 +
 +
 +:: Lista de tags de los cuales vamos a extraer los encabezamientos
 +set SUBJ_TAGS=v600v610v611v630v650v651v653v655v656
 +set NAME_TAGS=v100v110v111v700v710v711
 +
 +:: Valores del 2do indicador en campos 6xx que no deseamos considerar
 +set IGNORE_SUBJ_HEADINGS=#​6
 +
 +echo.
 +echo Intentamos normalizar la puntuacion final, filtramos encabezamientos
 +echo tematicos, y asignamos un numero (provisorio) a cada campo
 +echo de encabezamientos en el subcampo ^9.
 +mx "​seq=tmp\biblio1.id¦"​ lw=3000 "​pft=@HEAD.PFT"​ now tell=1000 > tmp\biblio2.id
 +
 +
 +:​SUBJ_DATABASE
 +
 +echo.
 +echo -----------------------------------------------------
 +echo  Base de encabezamientos tematicos
 +echo -----------------------------------------------------
 +
 +echo Creamos el listado de encabezamientos tematicos.
 +mx "​seq=tmp\biblio2.id¦"​ lw=1000 "​pft=if getenv('​SUBJ_TAGS'​) : v1*1.4 then @SUBJ.PFT fi" now tell=1000 > tmp\subj1.id
 +
 +echo.
 +echo Convertimos el listado en una base (desordenada y con duplicados).
 +id2i tmp\subj1.id create/​app=tmp\subj1 tell=1000
 +
 +echo.
 +echo Regularizamos la puntuacion final de los encabezamientos generados.
 +mx tmp\subj1 "​proc='​d2a2¦',​v1,'​¦'"​ "​proc='​d1a1¦',​@REGPUNT.PFT,'​¦'"​ proc='​d2'​ copy=tmp\subj1 now -all tell=1000
 +
 +echo.
 +echo Almacenamos en un campo auxiliar la clave de ordenacion.
 +mx tmp\subj1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp\subj1 now -all tell=5000
 +
 +echo.
 +echo Ordenamos la base de encabezamientos tematicos.
 +msrt tmp\subj1 100 v99 tell=5000
 +
 +echo.
 +echo Generamos la tabla para mapear los numeros de encabezamientos.
 +mx tmp\subj1 "​pft=if s(v1) <> ref(mfn-1,​v1) then putenv('​HEADING_CODE='​v9) fi, v9,'​|',​getenv('​HEADING_CODE'​)/"​ now -all tell=1000 > tmp\subjcode.seq
 +
 +echo.
 +echo Eliminamos los encabezamientos duplicados.
 +mx tmp\subj1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=1000 > tmp\subj.id
 +
 +echo.
 +echo Creamos la base de encabezamientos tematicos (ordenada y sin duplicados).
 +id2i tmp\subj.id create/​app=subj tell=1000
 +
 +
 +:​NAME_DATABASE
 +
 +echo.
 +echo -----------------------------------------------------
 +echo  Base de encabezamientos de nombres
 +echo -----------------------------------------------------
 +
 +echo Creamos el listado de encabezamientos de nombres
 +mx "​seq=tmp\biblio2.id¦"​ lw=1000 "​pft=if getenv('​NAME_TAGS'​) : v1*1.4 then @NAME.PFT fi" now tell=1000 > tmp\name1.id
 +
 +echo.
 +echo Convertimos el listado en una base (desordenada y con duplicados).
 +id2i tmp\name1.id create/​app=tmp\name1 tell=1000
 +
 +echo.
 +echo Regularizamos la puntuacion final de los encabezamientos generados.
 +mx tmp\name1 "​proc='​d2a2¦',​v1,'​¦'"​ "​proc='​d1a1¦',​@REGPUNT.PFT,'​¦'"​ proc='​d2'​ copy=tmp\name1 now -all tell=1000
 +
 +echo.
 +echo Almacenamos en un campo auxiliar la clave de ordenacion.
 +mx tmp\name1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp\name1 now -all tell=5000
 +
 +echo.
 +echo Ordenamos la base de encabezamientos de nombres.
 +msrt tmp\name1 100 v99 tell=5000
 +
 +echo.
 +echo Generamos la tabla para mapear los numeros de encabezamientos.
 +mx tmp\name1 "​pft=if s(v1) <> ref(mfn-1,​v1) then putenv('​HEADING_CODE='​v9) fi, v9,'​|',​getenv('​HEADING_CODE'​)/"​ now -all tell=1000 > tmp\namecode.seq
 +
 +echo.
 +echo Eliminamos los encabezamientos duplicados.
 +mx tmp\name1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=1000 > tmp\name.id
 +
 +echo.
 +echo Creamos base de encabezamientos de nombres (ordenada y sin duplicados).
 +id2i tmp\name.id create/​app=name tell=1000
 +
 +
 +echo.
 +:: -----------------------------------------------------------------
 +echo Reasignamos numeros a los encabezamientos en los registros
 +echo bibliograficos (subcampo 9).
 +:: -----------------------------------------------------------------
 +mx seq=tmp\subjcode.seq create=tmp\subjcode now -all
 +mx tmp\subjcode "fst=1 0 v1" fullinv=tmp\subjcode
 +mx seq=tmp\namecode.seq create=tmp\namecode now -all
 +mx tmp\namecode "fst=1 0 v1" fullinv=tmp\namecode
 +
 +mx "​seq=tmp\biblio2.id¦"​ lw=1000 "​pft=@RECODE.PFT"​ now tell=1000 > tmp\biblio3.id
 +
 +
 +
 +:​TITLE_DATABASE
 +
 +echo.
 +echo -----------------------------------------------------
 +echo  Base de titulos
 +echo -----------------------------------------------------
 +
 +:: Lista de campos que se incluyen en la base TITLE. ATENCION: completar/​revisar
 +::set TITLE_TAGS=v130~v245~v246~v700~v730~v740~v765~v773
 +set TITLE_TAGS=v130~v240~v245~v246~v730~v740~v765~v773
 +
 +echo Creamos listado de titulos.
 +mx "​seq=tmp\biblio3.id¦"​ lw=1000 "​pft=if getenv('​TITLE_TAGS'​) : v1*1.4 then ,​@TITLE.PFT,​ fi" now tell=1000 > tmp\title1.id
 +
 +echo.
 +echo Convertimos el listado en una base (desordenada y con duplicados).
 +id2i tmp\title1.id create/​app=tmp\title1 tell=1000
 +
 +echo.
 +echo Almacenamos en un campo auxiliar la clave de ordenacion de titulos.
 +mx tmp\title1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp\title1 now -all tell=5000
 +
 +echo.
 +echo Ordenamos la base de titulos.
 +msrt tmp\title1 100 v99 tell=5000
 +
 +echo.
 +echo Eliminamos los titulos duplicados.
 +mx tmp\title1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=1000 > tmp\title.id
 +
 +echo.
 +echo Creamos la base de titulos (ordenada y sin duplicados).
 +id2i tmp\title.id create/​app=title tell=1000
 +
 +
 +:​BIBLIO_DATABASE_2
 +
 +echo.
 +:: ---------------------------------------------
 +echo Recreamos la base bibliografica.
 +:: ---------------------------------------------
 +id2i tmp\biblio3.id create=biblio tell=1000
 +
 +
 +echo.
 +:: ---------------------------------------------
 +echo Ordenamos la base bibliografica.
 +:: ---------------------------------------------
 +msrt biblio 100 @LOCATION_SORT.PFT tell=5000
 +
 +
 +
 +:FULLINV
 +
 +:: -------------------------------------------------------------------
 +:: Generacion de archivos invertidos.
 +:: ATENCION: AC-ANSI.TAB envia los numeros al diccionario.
 +:: -------------------------------------------------------------------
 +
 +echo.
 +echo ---------------------------------------------
 +echo  Archivo invertido - Base de temas ...
 +echo ---------------------------------------------
 +mx subj fst=@HEADINGS.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=subj tell=2000
 +
 +echo.
 +echo ---------------------------------------------
 +echo  Archivo invertido - Base de nombres ...
 +echo ---------------------------------------------
 +mx name fst=@HEADINGS.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=name tell=2000
 +
 +echo.
 +echo ---------------------------------------------
 +echo  Archivo invertido - Base de titulos ...
 +echo ---------------------------------------------
 +mx title "fst=2 0 '​~',​@HEADSORT.PFT"​ actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=title tell=2000
 +
 +echo.
 +echo ---------------------------------------------
 +echo  Archivo invertido - Base bibliografica ...
 +echo ---------------------------------------------
 +mx biblio gizmo=DICTGIZ fst=@BIBLIO.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB stw=@BIBLIO.STW fullinv=biblio tell=2000
 +
 +
 +
 +:POSTINGS
 +
 +echo.
 +:: --------------------------------------------------------
 +echo Asignamos postings a los terminos del indice de temas.
 +:: --------------------------------------------------------
 +mx subj "​proc='​d11a11#',​f(npost(['​BIBLIO'​]'​_SUBJ_'​v9),​1,​0),'#'"​ copy=subj now -all tell=1000
 +
 +echo.
 +:: ----------------------------------------------------------
 +echo Asignamos postings a los terminos del indice de nombres.
 +:: ----------------------------------------------------------
 +mx name "​proc='​d11a11#',​f(npost(['​BIBLIO'​]'​_NAME_'​v9),​1,​0),'#'"​ copy=name now -all tell=1000
 +
 +
 +
 +:​AGREP_DICTIONARIES
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Generamos diccionarios para AGREP.
 +:: Solo nos interesan claves asociadas a ciertos tags.
 +:: /100 restringe la cantidad de postings (de lo contrario, da error)
 +:: ATENCION: los sufijos NAME, SUBJ, TITLE van en mayusculas o minusculas
 +:: en base a los valores que tome el parametro CGI correspondiente.
 +:: -----------------------------------------------------
 +echo    - subj
 +:: Para bibima usamos la base MSC; para el resto, la base SUBJ
 +if %2==bibima mx dict=\httpd\bases\catalis_pack\opacmarc\msc2000\msc "​pft=v1^*/"​ k1=a k2=zz now > dictSUBJ.txt
 +if not %2==bibima mx dict=subj "​pft=v1^*/"​ k1=a k2=zz now > dictSUBJ.txt
 +
 +echo    - name
 +mx dict=name "​pft=v1^*/"​ k1=a k2=zz now > dictNAME.txt
 +
 +echo    - title
 +::mx dict=biblio,​1,​2/​100 ​ "​pft=if v2^t:'​204'​ then v1^*/ fi" k1=a now > dicttitle.txt
 +ifkeys biblio +tags from=a to=zzzz > tmp\titlekeys.txt
 +mx seq=tmp\titlekeys.txt "​pft=if v2:'​204'​ then v3/ fi" now > dictTITLE.txt
 +
 +
 +:LANG
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Lista de codigos de idioma.
 +:: TO-DO: revisar (OEM2ANSI?)
 +:: -----------------------------------------------------
 +mx seq=LANG.TXT create=LANG now -all
 +mx LANG fst=@LANG.FST fullinv=LANG
 +mx dict=biblio k1=-LANG=A k2=-LANG=ZZZ "​pft=v1^**6.3,'​|',​v1^t/"​ now > langcode.txt
 +mx seq=langcode.txt create=langcode now -all
 +msrt langcode 30 "​mpu,​ref(['​LANG'​]l(['​LANG'​]v1.3),​v3)"​
 +mx langcode "​pft=v1,'​^p',​v2,'​^',/"​ now -all > langcode.txt
 +::mx LANG gizmo=OEM2ANSI copy=LANG now -all
 +
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Lista de codigos de bibliotecas.
 +:: -----------------------------------------------------
 +mx dict=biblio k1=-BIB=A k2=-BIB=ZZZ "​pft=v1^**5,'​^p',​v1^t/"​ now > bibcode.txt
 +
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Fechas extremas.
 +:: -----------------------------------------------------
 +mx dict=biblio "​k1=-F=1"​ "​k2=-F=2999"​ "​pft=v1^**3/"​ now > tmp\dates1.txt
 +mx tmp to=1 "​proc='​a1~',​replace(s(cat('​tmp\dates1.txt'​)),​s(#​),'&'​),'​~'"​ "​pft=v1.4,'​-',​s(right(v1,​5)).4"​ > dates.txt
 +
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Total de registros disponibles.
 +:: -----------------------------------------------------
 +echo. > bases.par
 +mx biblio count=1 ​ "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​BIBLIOGRAPHIC_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.par
 +mx name count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​NAME_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.par
 +mx subj count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​SUBJ_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.par
 +mx title count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​TITLE_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.par
 +
 +
 +echo.
 +:: -----------------------------------------------------
 +echo Fecha de esta actualizacion.
 +:: -----------------------------------------------------
 +mx tmp "​pft=s(date)*6.2'/'​s(date)*4.2'/'​s(date).4"​ to=1 > updated.txt
 +
 +
 +echo.
 +:: -----------------------------------------------------------
 +::echo Eliminamos archivos auxiliares generados por este script
 +:: -----------------------------------------------------------
 +::del tmp\*.* 2>nul
 +
 +del *.ln* 2>nul
 +del *.lk* 2>nul
 +
 +
 +if not %CONVERT_LINUX% == 1 goto NO_LINUX
 +
 +echo.
 +:: -----------------------------------------------------------
 +echo Conversion de bases de datos a Linux.
 +:: -----------------------------------------------------------
 +if not exist linux\nul mkdir linux
 +::if errorlevel 1 goto ERROR_MKDIR_LINUX
 +echo Directorio %2\linux creado.
 +
 +echo    - biblio
 +crunchmf biblio linux\biblio
 +crunchif biblio linux\biblio
 +
 +echo    - name
 +crunchmf name linux\name
 +crunchif name linux\name
 +
 +echo    - subj
 +crunchmf subj linux\subj
 +crunchif subj linux\subj
 +
 +echo    - title
 +crunchmf title linux\title
 +crunchif title linux\title
 +
 +
 +:NO_LINUX
 +
 +echo.
 +:: --------------------------------------------------------
 +echo Eliminamos archivos temporales del OPAC.
 +:: ATENCION: esto en realidad debe hacerse en el *servidor*
 +:: --------------------------------------------------------
 +del \httpd\cgi-bin\opacmarc\temp\*.$$$ 2>nul
 +
 +
 +echo.
 +echo ---------------------------------------------
 +echo  Ejecucion de %0.bat finalizada.
 +echo ---------------------------------------------
 +echo.
 +echo.
 +
 +
 +:: ATENCION: '​cd..'​ podria no ser lo que queremos siempre
 +cd ..
 +goto END
 +
 +
 +
 +:SYNTAX
 +type %0.syn
 +echo.
 +goto END
 +
 +
 +:​ERROR_CIPAR
 +echo.
 +echo ------------------------------------------------------------------
 +echo    *** ATENCION ***
 +echo    No se ha encontrado el archivo cipar: %CIPAR%
 +echo ------------------------------------------------------------------
 +echo.
 +goto END
 +
 +:​ERROR_DB_ORIGIN
 +echo.
 +echo ------------------------------------------------------------------
 +echo    *** ATENCION ***
 +echo    No se ha encontrado la base de datos de origen,
 +echo    %1
 +echo ------------------------------------------------------------------
 +echo.
 +goto END
 +
 +
 +:​ERROR_MKDIR
 +echo.
 +echo ------------------------------------------------------------------
 +echo    *** ATENCION ***
 +echo    No se pudo crear el directorio %2
 +echo    Bajo Windows 2000 a veces se genera este error, sin razon
 +echo    aparente; en tal caso, reintente.
 +echo ------------------------------------------------------------------
 +echo.
 +goto END
 +
 +:​ERROR_MKDIR_TMP
 +echo.
 +echo ------------------------------------------------------------------
 +echo    *** ATENCION ***
 +echo    No se pudo crear el directorio %2\tmp
 +echo    Bajo Windows 2000 a veces se genera este error, sin razon
 +echo    aparente; en tal caso, reintente.
 +echo ------------------------------------------------------------------
 +echo.
 +goto END
 +
 +:​ERROR_CHANGE_DIR
 +echo.
 +echo ------------------------------------------------------------------
 +echo    *** ATENCION ***
 +echo    No se pudo cambiar al directorio %2
 +echo ------------------------------------------------------------------
 +echo.
 +goto END
 +
 +
 +:END
 +set CIPAR=
 +</​code>​
 +
 +
 +{{tag>​opacmarc admin}}
opac.bat.txt · Last modified: 05/05/2009 00:00 (external edit)