📄 db_info.pro
字号:
function db_info,request,dbname;+; NAME:; DB_INFO; PURPOSE:; Function to obtain information on opened data base file(s);; CALLING SEQUENCES:; 1) result = db_info(request); 2) result = db_info(request,dbname); INPUTS (calling sequence 1):;; request - string specifying requested value(s); value of request value returned in result; 'open' Flag set to 1 if data base(s) are opened; 'number' Number of data base files opened; 'items' Total number of items (all db's opened); 'update' update flag (1 if opened for update); 'unit_dbf' Unit number of the .dbf files; 'unit_dbx' Unit number of the .dbx files; 'entries' Number of entries in the db's; 'length' Record lengths for the db's; 'external' True if the db's are in external format;; INPUTS (calling sequence 2):;; request - string specifying requested value(s); value of request value returned in result; 'name' Name of the data base; 'number' Sequential number of the db; 'items' Number of items for this db; 'item1' Position of item1 for this db; in item list for all db's; 'item2' Position of last item for this db.; 'pointer' Number of the item which points; to this db. 0 for first or primary; db. -1 if link file pointers.; 'length' Record length for this db.; 'title' Title of the data base; 'unit_dbf' Unit number of the .dbf file; 'unit_dbx' Unit number of the .dbx file; 'entries' Number of entries in the db; 'seqnum' Last sequence number used; 'alloc' Allocated space (# entries); 'update' 1 if data base opened for update; 'external' True if data base in external format;; dbname - data base name or number; OUTPUTS:; Requested value(s) are returned as the function value.;; HISTORY:; version 1 D. Lindler Oct. 1987; changed type from 1 to 7 for IDLV2, J. Isensee, Nov., 1990; William Thompson, GSFC/CDS (ARC), 30 May 1994; Added EXTERNAL request type.; Converted to IDL V5.0 W. Landsman September 1997;-;------------------------------------------------------------------------on_error,2 ;Return to caller;; data base common block;common db_com,QDB,QITEMS,QLINK;; QDB(*,i) contains the following for each data base opened;; bytes; 0-18 data base name character*19; 19-79 data base title character*61; 80-81 number of items (integer*2); 82-83 record length of DBF file (integer*2); 84-87 number of entries in file (integer*4); 88-89 position of first item for this file in QITEMS (I*2); 90-91 position of last item for this file (I*2); 92-95 Last Sequence number used (item=SEQNUM) (I*4); 96 Unit number of .DBF file; 97 Unit number of .dbx file (0 if none exists); 98-99 Index number of item pointing to this file (0 for first db); 100-103 Number of entries with space allocated; 104 Update flag (0 open for read only, 1 open for update); 119 True if database is in external (IEEE) format;; QITEMS(*,i) contains decription of item number i with following; byte assignments:;; 0-19 item name (character*20); 20-21 IDL data type (integet*2); 22-23 Number of values for item (1 for scalar) (integer*2); 24-25 Starting byte position in original DBF record (integer*2); 26-27 Number of bytes per data value (integer*2); 28 Index type; 29-97 Item description; 98-99 Print field length; 100 Flag set to one if pointer item; 101-119 Data base this item points to; 120-125 Print format; 126-170 Print headers; 171-172 Starting byte in record returned by DBRD; 173-174 Data base number in QDB; 175-176 Data base number this item points to;;; QLINK(i) contains the entry number in the second data base; corresponding to entry i in the first data base.;-------------------------------------------------------------------------;req=strtrim(strupcase(request)) ;requested values=size(qdb)if req eq 'OPEN' then begin if s[0] eq 0 then return,0 else return,1endif s[0] eq 0 then message,'No data base file(s) opened'n=s[2] ;number of data bases;; calling sequence 1 result=db_info(request);if N_params(0) lt 2 then begin case req of 'NUMBER' : return,n ;number of files opened 'ITEMS' : begin ;total number of items s=size(qitems) return,s[2] end 'LENGTH' : return,long(fix(qdb[82:83,*],0,n)) ;total record length 'UPDATE' : return,qdb[104,0] ;update flag 'UNIT_DBF' : return,qdb[96,*] ;.dbf unit number 'UNIT_DBX' : return,qdb[97,*] ;.dbx unit number 'ENTRIES' : return,long(qdb[84:87,*],0,n) ;number of entries 'EXTERNAL' : return,qdb[119,*] eq 1 ;external format? else : message,'Invalid request for information' endcaseendif;; second calling sequence: result=db_info(request,dbname) ----------;s=size(dbname)ndim=s[0]type=s[ndim+1]if (ndim gt 0) or (type eq 0) then goto,abort;; convert name to number;if type eq 7 then begin db_name=strtrim(strupcase(dbname)) for i=0,n-1 do $ if db_name eq strtrim(string(qdb[0:18,i])) then goto,found goto,abort ;not foundfound: dbnum=i end else begin ;number supplied dbnum=fix(dbname) if (dbnum lt 0) or (dbnum ge n) then goto,abortendcase req of 'NAME' : return,strtrim(string(qdb[0:18,dbnum])) ;db name 'NUMBER' : return,dbnum ;data base number 'ITEMS' : begin ;number of items x=fix(qdb[80:81,dbnum],0,1) return,x[0] end 'ITEM1' : begin ;starting item number x=fix(qdb[88:89,dbnum],0,1) return,x[0] end 'ITEM2' : begin ;last item number x=fix(qdb[90:91,dbnum],0,1) return,x[0] end 'POINTER' : begin ;item number pointer x=fix(qdb[98:99,dbnum],0,1) return,x[0] end 'LENGTH' : begin ;record length x=fix(qdb[82:83,dbnum],0,1) return,long(x[0]) end 'TITLE' : return,strtrim(string(qdb[19:79,dbnum])) ;data base title 'UNIT_DBF' : return,qdb[96,dbnum] ;.dbf unit number 'UNIT_DBX' : return,qdb[97,dbnum] ;.dbx unit number 'ENTRIES' : begin ;number of entries x=long(qdb[84:87,dbnum],0,1) return,x[0] end 'SEQNUM' : begin ;last sequence number x=long(qdb[92:95,dbnum],0,1) return,x[0] end 'ALLOC' : begin ;allocated size x=long(qdb[100:103,dbnum],0,1) return,x[0] end 'UPDATE' : return,qdb[104,dbnum] ;update flag 'EXTERNAL' : begin ;External format? x=qdb[119,*] eq 1 return,x[0] end else: message,'Invalid information request'endcaseabort: message,'Invalid data base name or number supplied'end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -