Dbgl
Examples
! Defining the environment
environment demo
! Selecting database
using database demo.tek/tek alias db1
! Starting of the definition group grp1
define grp1
!Checking the end of file
if no_more_data(db1) then
stop 'End of database reading'.
! Selecting the Header record
if current_record(db1:header) then
! Printing on the screen each site code
output! = db1:header:site.
always
! Reading of next line
read db1.
end of grp1 definition
! Local parameters
environment krja
! Selecting database
using database demo.tek/tek alias db1
! Generating a new database group definition
generate demob.tek/tek alias dbout
! Checking end of database
if no_more_data(db1) then
stop 'End of database generation'.
! copying and explicitly saving the header record into the new database
if current_record(db1:header) then
dbout:header = db1:header ;
save dbout:header.
! copying the geotec (sample) information only for structures of type B
if current_record(db1:geotec) and db1:geotec:type eqs "B" then
dbout:geotec=db1:geotec.
if current_record(db1:geotec) and db1:geotec:type eqs "B" then
! Explicity saving the information
save dbout:geotec.
always
! Getting a new record
read db1.
end of dbout generation
1) Mixing two fields into one new field
!Maptek Chile Ltda.
!Script to mix a numerical field and a character field<
!Date: December- 1996
!Author : Eric Gonzalez
!Description:
!Este script transforma un campo numerico en caracter y lo concatena
!con otro campo de tipo caracter. El resultado se almacena en un campo
!del mismo tipo llamado hb (caracter).
!
!Para la transformacion crea una base de datos temporal llamada
!esctmp.fin con el campo calculado.
!
!Para ejecutar:
!
! dbgl <el nombre de este script>
!
!Parametros locales y base de datos
environment bhp
using database esc.fin/fin alias db1
!Definicion de un campo como caracter para hacer la conversion
define init
always
nuevo_campo = " " ;
stop " Fin de la etapa inicial" .
end of init definition
! Generacion de la nueva base de datos generate esctmp.fin/fin alias db3
if no_more_data(db1) then
stop " Adicion terminada" .
! Copiado de los registros que no se modificaran
if current_record(db1:collar) then
db3:collar = db1:collar ;
save db3:collar .
if current_record(db1:survey) then
db3:survey = db1:survey ;
save db3:survey .
if current_record(db1:geocod) then
db3:geocod = db1:geocod ;
save db3:geocod .
if current_record(db1:assay) then
db3:assay = db1:assay ;
save db3:assay .
if current_record(db1:dhfaul) then
db3:dhfaul = db1:dhfaul ;
save db3:dhfaul .
if current_record(db1:wind) then
db3:wind = db1:wind ;
save db3:wind .
if current_record(db1:geotec) then
db3:geotec = db1:geotec ;
save db3:geotec .
! Calculo del campo nuevo.
if current_record(db1:geotin) then
db3:geotin = db1:geotin ;
nuevo_campo = db1:geotin:surcon ;
db3:geotin:hb = pack(ljust(rockst)&ljust(nuevo_campo));
save db3:geotin .
always
read db1 .
end of db3 generation
2) Addition of samples field to reach the survey bottom depth in a drill hole database
! Script for tacking on an extra assay record if the down-hole
! surveys exceed the assay intervals. The added assay record
! consists of the last "TO" of the previous assay record and
! the depth of the last survey record.
! Note the line "newdb:assay:au = -9.0 ;" you will want to modify
! this so that garbage isn't put into other assay fields, for example,, be
! sure to account for all other assay fields in the assay record.
! Also adds records to end of the surveying for Lithology, Alterisation,
! Mineralisation, and Structure.
!
! If no assays, lithology, etc exist for the hole, then one dummay record is
! added for the entire hole.
!
! Bob Nutsch, Denver Office
! Mike Husbands, Santiago Office
! August 1996
environment cmei
assign output! to list.out
! copy from this database
using database indi.ddh/ddh alias olddb
define init
always
survdepth = 0 ;
asyto = 0 ;
altto = 0 ;
lithto = 0 ;
minto = 0 ;
estrto = 0 ;
TRUE = 1 ;
FALSE = 0 ;
no_assays = FALSE ;
no_alt = FALSE ;
no_lith = FALSE ;
no_min = FALSE;
no_estr = FALSE ;
stop "End of init" .
end of init definition
! copy to this database
generate indifixed.ddh/ddh alias newdb
if no_more_data(olddb) then
stop "End of adding assay records" .
if ( current_record(olddb:collar) and no_assays eq TRUE ) or (finished_record(olddb:assays) and survdepth gt asyto ) then
output! = "Hole ID: " & currholeid & " New assay To depth = " & format(survdepth,"F10.3") ;
newdb:assays:from = asyto ;
newdb:assays:to = survdepth ;
newdb:assays:largo = survdepth - asyto ;
newdb:assays:sample = 9999 ;
newdb:assays:veta = ' ' ;
newdb:assays:nsr = 9999 ;
newdb:assays:au = -999.0 ;
newdb:assays:ag = -999.0 ;
newdb:assays:cu = -999.0 ;
save newdb:assays ;
asyto = 0 ;
no_assays = FALSE .
if ( current_record(olddb:collar) and no_lith ) or ( finished_record(olddb:lith) and survdepth gt lithto ) then
output! = "Hole ID: " & currholeid & " New lith To depth = " & format(survdepth,"F10.3") ;
newdb:lith:from = lithto ;
newdb:lith:to = survdepth ;
newdb:lith:lith = "9999" ;
save newdb:lith ;
lithto = 0 ;
no_lith = FALSE .
if ( current_record(olddb:collar) and no_alt) or (finished_record(olddb:alt) and survdepth gt altto ) then
output! = "Hole ID: " & currholeid & " New alt To depth = " & format(survdepth,"F10.3") ;
newdb:alt:from = altto ;
newdb:alt:to = survdepth ;
newdb:alt:alt1 = "9999" ;
newdb:alt:alt2 = "9999" ;
save newdb:alt ;
altto = 0 ;
no_alt = FALSE .
if ( current_record(olddb:collar) and no_min ) or (finished_record(olddb:min) and survdepth gt minto ) then
output! = "Hole ID: " & currholeid & " New min To depth = " & format(survdepth,"F10.3") ;
newdb:min:from = minto ;
newdb:min:to = survdepth ;
newdb:min:min1 = "9999" ;
newdb:min:min2 = "9999" ;
save newdb:min ;
minto = 0 ;
no_min = FALSE .
if ( current_record(olddb:collar) and no_estr ) or (finished_record(olddb:estr) and survdepth gt estrto ) then
output! = "Hole ID: " & currholeid & " New estr To depth = " & format(survdepth,"F10.3") ;
newdb:estr:from = estrto ;
newdb:estr:to = survdepth ;
newdb:estr:estr = "9999-999.0" ;
save newdb:estr ;
estrto = 0 ;
no_estr = FALSE .
if current_record(olddb:collar) then
!
no_assays = TRUE ;
no_lith = TRUE ;
no_alt = TRUE ;
no_min = TRUE ;
no_estr = TRUE ;
!
! Write new collar record
!
newdb:collar = olddb:collar ;
currholeid = olddb:collar:holeid ;
save newdb:collar .
! endif (current_record(olddb:collar)
if current_record(olddb:survey) then
newdb:survey = olddb:survey ;
survdepth = olddb:survey:to ;
save newdb:survey .
if current_record(olddb:assays) then
newdb:assays = olddb:assays ;
asyto = olddb:assays:to ;
save newdb:assays .
if current_record(olddb:lith) then
newdb:lith = olddb:lith ;
lithto = olddb:lith:to ;
save newdb:lith .
if current_record(olddb:alt) then
newdb:alt = olddb:alt ;
altto = olddb:alt:to ;
save newdb:alt .
if current_record(olddb:min) then
newdb:min = olddb:min ;
minto = olddb:min:to ;
save newdb:min .
if current_record(olddb:estr) then
newdb:estr = olddb:estr ;
estrto = olddb:estr:to ;
save newdb:estr .
always
read olddb .
end of newdb generation
3) Projecting of a geotechnical database to a nominated level
!Maptek Chile Ltda.
!Script to project geotechnical databases
!Date: December- 1996
!Author : Eric Gonzalez
!Description:
! This Script projects a geotec database to a nominated level.
! The projection is in the form of a new "tek" database with
! The same structure and values than the original database
! excepting for coordinates of structures.
! Also this script creates an ASCII file with points to load
! as lines using Envisage's ASCII import procedure. This ASCII
! may be loaded as lines to generate an extension of each
! structure.
!
! Structures with a dip of 0 are not projected
!
! To Run
!
! dbgl <this script>
!
!
!Parametros locales
environment krja
! Selecction of original database
assign output1! to text_file
using database demo.tek/tek alias db1
! First group to be executed
define initialize
always
! Variables to diferenciate new objects in ascii file
mx = 0 ;
my = 1 ;
planta = 0 ;
length = 0 ;
text_file = "text.txt" ;
siascii = "N" ;
! Input of target RL
output! = "Cota Planta a la que desea proyectar las estructuras :" ;
planta = input? ;
! Do you want an ASCII file
output! = "desea generar un archivo ASCII con la proyeccion de las lineas <s/n> : " ;
siascii = input? .
! If you want an ASCII file Input the length
! of the projected line
if upcase(siascii) eq "S" then
output! = "Longitud de la linea proyectada : " ;
length = input? ;
length = length / 2 .
always
dbase1 = " " ;
stop "end of init" .
end of initialize definition
!Demotemp.tek database generation
generate demotemp.tek/tek alias db3
if no_more_data(db1) then
stop " Proyeccion terminada" .
if current_record(db1:header) then
db3:header = db1:header ;
save db3:header .
if current_record(db1:geotec) then
dh = planta - db1:geotec:elev ;
db3:geotec = db1:geotec ;
db3:geotec:elev = db1:geotec:elev+dh .
if db1:geotec:dip ne 0 and current_record(db1:geotec) then
db3:geotec:amgest = db1:geotec:amgest + (dh/tan( db1:geotec:dip/57.295779))*sin((db1:geotec:dipdir-180)/57.295779) ;
db3:geotec:amgnth = db1:geotec:amgnth + (dh/tan(db1:geotec:dip/57.295779))*cos((db1:geotec:dipdir-180)/57.295779) .
!Generacion de Ascii
if upcase(siascii) eq "S" then
topx = db3:geotec:amgest+length*sin((db1:geotec:dipdir-90)/57.295779) ;
topy = db3:geotec:amgnth+length*cos((db1:geotec:dipdir-90)/57.295779) ;
topz = db3:geotec:elev ;
botx = db3:geotec:amgest-length*sin((db1:geotec:dipdir-90)/57.295779) ;
boty = db3:geotec:amgnth-length*cos((db1:geotec:dipdir-90)/57.295779) ;
botz = db3:geotec:elev ;
output1! = format(topx,"F15.3") &
format(topy,"F15.3") &
format(topz,"F15.3") &
format(my,"F15.3") ;
output1! = format(botx,"F15.3") &
format(boty,"F15.3") &
format(botz,"F15.3") &
format(mx,"F15.3") .
if current_record(db1:geotec) then
save db3:geotec .
always
read db1 .
end of db3 generation