使用IDL读写数据
- 格式:ppt
- 大小:177.00 KB
- 文档页数:8
IDL读取ENVI的img数据格式的例子源码CODE:; PURPOSE:; IDL program, which reads standard ENVI image files (*.img).;; CALLING SEQUENCE:; read_envi_file, infile, img, xs, ys, type,offset;; INPUTS:; infile - 传入数据文件名;; OPTIONAL INPUTS:; None;; KEYWORD PARAMETERS:; None;; OUTPUTS:--这些均是返回值,注意是位置参数; img - ENVI的图像文件;; xs - 列号;; ys - 行号;; type - 数据类型代码; offset - 头文件偏移量;; mapinfo - map及地理坐标信息;;; EXAMPLE:read_envi_image, 'C:\Program Files\ITT\IDL708\products\envi46\data\ddd', data;;;data即读取的数据值;; MODIFICATION HISTORY:; Written by: Carsten Pathe, cp@ipf.tuwien.ac.at; Date: 25.08.2003;; Modified By DYQ; 2009-8-18 修正:数据无扩展名会读取错误; 简化数组创建代码; 2009-12-22 修正:添加BIP、BIL多波段数据支持;-PRO Read_envi_image, infile, img, bandsnum,xs, ys, type, offset, mapinfoCOMPILE_OPT idl2image = infile;Add by DYQ-for数据文件无扩展名的bugpointExist = STRPOS(infile,'.')IF pointExist[0] NE -1 THEN BEGINheader = Strsplit(infile,'.',/extract)header = header[N_ELEMENTS(header)-2]+'.hdr'END ELSE header = infile + '.hdr';打开解析头文件OPENR, unit, header, /get_lunheader_line = '';文件未读取完之前一直循环WHILE NOT EOF(unit) DO BEGINREADF, unit, header_linetmp = Strsplit(header_line[0], '=', /extract)header_keyword = Strsplit(tmp[0], ' ', /extract);解析头文件中的信息IF header_keyword[0] EQ 'samples' THEN xs = LONG(tmp[1])IF header_keyword[0] EQ 'lines' THEN ys = LONG(tmp[1])IF header_keyword[0] EQ 'header' THEN offset = LONG(tmp[1])IF header_keyword[0] EQ 'bands' THEN bandsnum = LONG(tmp[1])IF header_keyword[0] EQ 'interleave' THEN dataInter = STRUPCASE(STRTRIM(tmp[1],2)) IF header_keyword[0] EQ 'data' THEN type = LONG(tmp[1]);如读取map信息则解析map信息IF header_keyword[0] EQ 'map' THEN BEGINmapinfo_tmp=Strsplit(tmp[1],'{',/extract)mapinfo_tmp=Strsplit(mapinfo_tmp[1],',',/extract)mapinfo={ulx:0.,uly:0.,spacing:0.}mapinfo.ulx=mapinfo_tmp[3]mapinfo.uly=mapinfo_tmp[4]mapinfo.spacing=mapinfo_tmp[5]ENDIFENDWHILE;关闭头文件CLOSE,unit & FREE_LUN, unit;modified by dyq;打开数据文件定位到数据位置OPENR, unit,image, /get_lunPOINT_LUN, unit, offset;判断数据存储类型;完全按照ENVI的数据存储格式定义CASE dataInter OF'BSQ': BEGINimg = MAKE_ARRAY(xs,ys,bandsnum,type = type);读取数据文件中的数据READU,unit,imgEND;按行保存'BIL': BEGINimg = MAKE_ARRAY(xs,bandsnum, ys,type = type);读取数据文件中的数据READU,unit,img;转换为BSQimg= Transpose(img,[0,2,1])END'BIP': BEGIN; IF bandsnum GT 1 THENimg = MAKE_ARRAY(bandsnum,xs,ys,type = type) $ ; ELSE img = MAKE_ARRAY(xs,ys,type = type)img = MAKE_ARRAY(bandsnum,xs,ys,type = type);读取数据文件中的数据READU,unit,img;转换为BSQimg= Transpose(img,[1,2,0])ENDELSE:ENDCASEFREE_LUN, unitimg = Reform(img)。
文章标题:深度探讨:通过id值可遍历数据库数据的安全问题及解决办法导语:在数据库应用中,通过id值可遍历数据库数据是一种常见的操作方式。
然而,这种方式也存在一定的安全隐患,有可能被恶意利用,导致数据泄露和其他安全问题。
本文将深入探讨这一问题,并提出相应的解决办法。
一、通过id值可遍历数据库数据的安全问题在许多数据库应用中,通过id值可遍历数据库数据是一种常见的操作方式。
在网站的文章列表、商品展示、用户信息管理等功能中,通过不同的id值可以访问到相应的数据。
然而,这种方式存在一定的安全隐患,主要表现在以下几个方面:1. 数据隐私泄露:如果系统对id值的访问权限控制不当,有可能导致用户隐私数据的泄露。
恶意用户可以通过遍历id值来获取系统中的所有数据,包括用户信息、财务数据等敏感信息。
2. 数据篡改:通过遍历id值,恶意用户可以修改系统中的数据,例如篡改文章内容、商品价格等。
这不仅会损害数据的完整性,还可能对系统正常运行造成影响。
3. 安全漏洞利用:一些安全漏洞可能会被利用,通过遍历id值进行SQL注入等攻击,从而获取系统权限、执行恶意操作等。
二、解决办法针对通过id值可遍历数据库数据的安全问题,我们可以采取以下一些解决办法:1. 强化权限控制:在系统设计时,需要对id值的访问进行严格的权限控制,确保用户只能访问其拥有权限的数据。
可以通过RBAC(基于角色的访问控制)等权限管理方式,对用户进行细粒度的控制。
2. 使用随机化id值:在显示数据时,可以使用随机化的id值来代替真实的数据库id,从而避免被恶意遍历。
在后台进行id值与真实数据的映射,确保数据安全性。
3. 防止SQL注入:在系统开发中,需要采取相应的安全防护措施,避免通过id值进行SQL注入等攻击。
例如使用参数化查询、输入验证等方式防止恶意注入。
4. 加强系统监控:对系统的访问日志、异常日志进行及时监控和分析,发现异常访问行为及时进行处理,减少安全风险。
自己看到的方法,不知道是谁写的,就没办法注明出处了。
作者见谅!1==========1 pro readhdf2 ; Set some constants3 FILE_NAME="E:/sssbak/MODSST.hdf"4 SDS_NAME="sst"5 X_LENGTH=13546 Y_LENGTH=485678 ; Open the file and initialize the SD interface9 sd_id = HDF_SD_START( FILE_NAME, /read )10 ; Find the index of the sds to read using its name11 sds_index = HDF_SD_NAMETOINDEX(sd_id,SDS_NAME)12 ; Select it13 sds_id = HDF_SD_SELECT( sd_id, sds_index )1415 ; Set the data subset limits. Actually, it is read from the first element, so "start" is [0,0]. X_LENGTH elements will be read along the X axis and Y_LENGTH along Y.16 start=INTARR(2) ; the start position of the data to be read17 start[0] = 018 start[1] = 019 edges=INTARR(2) ; the number of elements to read in each direction20 edges[0] = X_LENGTH21 edges[1] = Y_LENGTH22 ; Read the data : you can notice that here, it is not needed to allocate the data array yourself23 HDF_SD_GETDATA, sds_id, data24 dims = size(data)25 ;HDF_SD_GETDATA, sds_id, data, start = start, count = edges2627 ; print them on the screen. You can notice that the IDL method HDF_SD_GETDATA swaps the HDF indexes convention [Z,Y,X] to [X,Y,Z]. This method is more efficient on IDL. If you prefer theusual HDF convention, you should better use the set the NOREVERSE keyword when calling HDF_SD_GETDATA28 ;FOR i=0,(X_LENGTH-1),1 DO BEGIN ; crosses X axis29 ; FOR j=0,(Y_LENGTH-1),1 DO BEGIN ; crosses Y axis30 ; PRINT, FORMAT='(I," ",$)', data[i,j]31 ; ENDFOR32 ; PRINT,""33 ;ENDFOR3435 ; end access to SDS36 HDF_SD_ENDACCESS, sds_id37 ; close the hdf file38 HDF_SD_END, sd_id39 print,dims[1];1354 也就是说,实际上X_LENGTH,X_LENGTH可以通过size读出。
IDL(Interactive Data Language)是一种用于数据分析、可视化和跨平台应用程序开发的编程语言。
IDL可以用于处理各种类型的数据,包括数字、文本、图像、视频等。
IDL的用法包括以下方面:
1. 编写IDL脚本:IDL脚本是一系列IDL命令和函数的集合,可以按照需要执行一系列操作,例如读取数据、处理数据、绘制图形等。
2. 运行IDL脚本:通过IDL解释器或编译器运行IDL脚本,执行脚本中的命令和函数。
3. 交互式环境:IDL提供了一个交互式环境,可以在其中直接输入命令和函数,执行操作并查看结果。
4. 跨平台应用程序开发:IDL可以用于开发跨平台的应用程序,例如在Windows、Linux和Mac OS X等操作系统上运行的应用程序。
5. 数据分析和可视化:IDL可以用于对数据进行各种分析和可视化操作,例如绘制图形、制作动画、统计分析等。
6. 外部库支持:IDL可以调用外部库中的函数和算法,扩展其功能和性能。
总之,IDL是一种功能强大的编程语言,可以用于各种数据分析和可视化任务,以及跨平台应用程序的开发。
IDL开发专题-灵活、多样的输入输出本帖最后由 lianyi_dyq 于 2010-7-30 10:01 编辑1 输入与输出IDL中输入输出的基本原则是:“只要有数据,就可以将其读进IDL”,IDL对数据的格式没有要求,也就是任何数据格式都能自由的解析,这使得IDL成为目前功能最强、最灵活的科学可视化分析语言。
1.1 标准输入输出1.1.1 输入输出函数IDL中读写ASCII码文本是很重要的一部分。
标准输入是键盘输入,标准输出指的是屏幕输出显示。
表1-1中列出了标准输入输出的几个函数。
1.1.2 格式化输出数据的格式化输出是按照设计的格式进行输出。
IDL支持“%”和“\”。
标准的输入输出时可以进行格式的自由控制,格式化控制的格式为:[n]FC[+][-][width],各个字段代表的含义见表1-2如下面的例子PRO Test_formatCOMPILE_OPT idl2;PRINT, FORMAT = '(A6)', '123456789'PRINT, FORMAT = '(I2,$)', INDGEN(6);PRINT, FORMAT = '("First", 20X, "Last", T10, "Middle")'PRINT, FORMAT = '("First", 20X, "Last", T4, "Middle")';PRINT, FORMAT = '("First", 5X, "Last", TL2, "Middle")';PRINT, SYSTIME(/JULIAN)PRINT, FORMAT='(C())', SYSTIME(/JULIAN)PRINT, FORMAT='(C(CMOI,"/",CDI))',SYSTIME(/JULIAN)PRINT, FORMAT='(C(CHI2.2,":",CMI2.2,":",CSF05.2))',SYSTIME(/JULIAN);PRINT, FORMAT='(%"I have %d monkeys, %s,", " and ", I0, " parrots.")', 10, 'Scott', 5PRINT, format='(%"I have \xb1%d monkeys ")', 5;print,'0F'X ; 十六进制转十进制print,"17; 八进制转十进制print, 119, format='(B)';十进制转二进制的print, 119, format='(O)';十进制转到八进制print, 119, format='(Z)';十进制转到十六进制END1.2 文件读写1.2.1 打开文件IDL从磁盘上的文件读写数据,必须首先把一个逻辑设备号连接到一个特定的文件,然后进行文件操作如打开、关闭和读取等。
在IDL中读写数据2 zz读列格式数据文件到目前为止一切正常。
当试着将列格式数据读入IDL时问题就出来了。
可能会按如下做。
首先,创建要读入数据的变量。
IDL header=''IDL thislat=fltarr(41)IDL thislon=fltarr(41)IDLthistemp=fltarr(41)打开column.dat文件读首行:IDLOpenR,lun,'column.dat',/Get_Lun IDL ReadF,lun,header由于是用一个循环将数据放进文件的,所以也可能会用一个循环从文件中将数据读出。
IDL FOR j=0,40 DO ReadF,lun,thislat[j],thislon[j],thistemp[j]但这不奏效。
虽然上面的命令没有错误,但没有数据读入变量(如打印变量值,它们将是零)。
其原因是IDL中有一个严格的规则,即不能带下标的变量来读入内容。
原因是IDL将带下标的变量作为值而不是作为变量的引用传递给象ReadF这样的IDL 程序。
以数值传递的数据不能在被调用的子程序中改变,因为被调用的子程序只是获得该数据的备份,而不是获得该数据的指针。
要改变这种属性需要对IDL进行大改,然而这是不可能的。
有两种方法解决这个问题。
第一种是将数据读入一个循环中的临时变量。
这种方法最好是运用文本编辑器将命令输入文件中来完成,因为很难在IDL命令行上编写多行循环。
可用Point_Lun命令将文件指针返回到数据文件的起始处。
IDL Point_Lun,lun,0在文本文件loopread.pro中输入下列命令。
temp1=0.0 temp2=0.0 temp3=0.0ReadF,lun,header FOR j=0,40 DO BEGIN ReadF,lun,temp1,temp2,temp3 Thislat[j]=temp1 Thislon[j]=temp2 Thistemp[j]=temp3 ENDFOR END执行文本文件中的代码:IDL.Run loopread将原始矢量的值和刚读入矢量的值打印出来,将发现它们是相同的。
IDL入门教程三IDL入门教程三IDL(Interactive Data Language)是由美国教育研究公司Research Systems公司开发的一种用于科学数据分析和可视化的编程语言。
它是一种专门为天文学家、大气科学家和地球科学家等科学家设计的语言,在科学领域中广泛应用。
本教程将带领读者入门IDL,了解其基本语法和使用方法。
一、IDL的安装2.双击安装文件,按照提示完成安装过程。
3. 在命令行输入idl即可进入IDL环境。
二、IDL的基本语法IDL的基本语法与其他编程语言相似,包括变量定义、数据类型、运算符和控制语句等。
1.变量定义在IDL中,可以使用等号来定义变量,并赋予其一个初始值。
例如:a=10b = "Hello World"c=[1,2,3,4,5]2.数据类型IDL支持多种数据类型,包括整数、浮点数、字符和数组等。
例如:a=10;整数型b=3.14;浮点型c = "Hello" ; 字符型d=[1,2,3,4,5];数组型3.运算符IDL支持常用的运算符,包括算术运算符、关系运算符和逻辑运算符等。
例如:a=10+5;加法b=10-5;减法c=10*5;乘法d=10/5;除法e=10>5;大于f=10<5;小于g=10==5;等于h=10!=5;不等于i=a>5&&a<15;与运算j=a>5,a<15;或运算4.控制语句IDL支持if-else语句和for循环语句等控制语句。
例如:if a > 5 then beginprint, "a大于5"endelse beginprint, "a小于等于5"endfor i=0, n-1 do beginprint, iend三、IDL的使用方法IDL可以通过命令行模式和脚本文件模式进行编程。
1.命令行模式在IDL环境中,可以直接输入命令进行交互式编程。