在 IDL 中创建结构

Create a structure in IDL

我想在 IDL 中创建一个结构并放入我的 ASCII 文件中的信息。问题是我有几个 ASCII 文件,但列数和行数总是不同。例如,我有一个 ASCII 文件 "data.dat",它有 50 行和 2040 列。我知道我们可以定义数据结构(如果我们假设我只有 5 列):

datastruct = { col1:0L, col2:0.0, col3:0.0, col4:0.0, col5:0.0}

我可以读取我的文件然后复制结构:

file = 'data.dat'
nrows = file_line(file) ; to estimate the number of rows
data = replicate(datastruct, nrows)
openr, lun, file, /GET_LUN
readF, lun, data
free_lun, lun

我可以做:print, data.col1print, data.col2 等等...但这将 只给我前 5 列 。除了 2040 列,以及当我们事先不知道文件中的列数时,我该如何做同样的事情。

真实数据文件包含了不同日期观测到的几颗恒星的通量,各有误差。 table有没有header.

天 Flux1 Err1 Flux2 Err2 Flux3 Err3.................Flux2040 Err2040

感谢您的帮助!

如果数字矩阵比结构更适合您,因为您已经正确格式化了 ASCII 文件,一个简单的解决方案是只使用 read_ascii:

infile = "C:\Users\LB_laptop\Downloads\phot.avg.1.0"
data = read_ascii(infile)
data = data.FIELD001

这为您提供了一个易于处理的数字矩阵。例如:

IDL> data[0:5,0:10]
       2457454.3       1.6190000             NaN      0.52709073       25.695290      0.20502000
       2457455.3       1.8770000             NaN      0.14101060       27.126869      0.71034002
       2457499.5       1.2810000             NaN      0.63232613       25.497650      0.17557999
       2457500.3       1.5319999             NaN      0.41562101       25.953260      0.25950000
       2457519.5       1.3420000             NaN      0.38020891       26.049940      0.28159001
       2457525.3       1.2880000             NaN      0.29697639       26.318199      0.35189000
       2457528.3       1.3510000             NaN      0.41356701       25.958639      0.26128000
       2457529.3       1.3300000             NaN      0.36875120       26.083170      0.28975999
       2457530.3       1.3400000             NaN      0.41647339       25.951031      0.25999999
       2457533.3       1.3120000             NaN      0.33893269       26.174721      0.19237000
       2457534.3       1.2800000             NaN      0.38690910       26.030979      0.15137000