在 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.col1
或 print, 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
我想在 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.col1
或 print, 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