【问题标题】:Automatically Read Array Size into IDL自动将数组大小读入 IDL
【发布时间】:2022-11-17 06:22:56
【问题描述】:

我正在尝试自动化 IDL 中的代码,该代码需要创建一些 .dat 文件并将它们读入数组。这些文件中的每一个都有 4 列,但行数不同,我不确定如何设置它以便每次自动使数组适合行数。

openr, lun, +field+'_'+color+'.dat', /get_lun
array = fltarr(4, 380)

readf, lun, array
outlier=array[0,*]
mag=array[1,*]
ra=array[2,*]
dec=array[3,*]
position2 = [outlier, mag, ra, dec]
free_lun, lun
return, position2

这是我正在使用的当前代码块,我刚刚一直在更改每个文件的数组值,这变得很乏味,如果数组值设置得太高,它也不会起作用。

下一部分是我很好奇的东西,但它已经成功地解决了大部分问题,但我仍然想问一下是否可以像其他代码一样重新设计它:

我也有一个类似的代码,它创建了我正在阅读的原始文件(抱歉,我知道它有点乱,我是 IDL 的新手):

i=0
position = []
this=[]
OpenW, lun, +field+'_'+color+'.dat', /get_lun
while i lt 16000 do begin       ;typically 16798
outlier = plot_data[0,i]
mag=plot_data[1,i]
ra = plot_data[2,i]
dec=plot_data[3,i]
if outlier lt 0.0 then begin
PrintF, lun, outlier, mag, ra, dec

                                ;
endif

position=[outlier, mag, ra, dec]

i=i+1
endwhile

...它读取一个大的 .sav 文件并将其转换为一个 4 列数组,这样我就可以使用我在之前代码中使用的离群值创建新文件。我不确定如何打开或读取 .sav 文件,所以我使用了在我之前从事该项目的人的旧代码,但是 16798 的大小不适用于每个 .sav 文件,所以我减少了它,但我确实想看看我是否可以修复它,所以我不会从所有其他数据中排除 ~700 点以容纳少量其他文件。有没有办法使用类似的代码来修复这里的第一个代码?

对不起,知道有很多问题,我们将不胜感激任何帮助!

【问题讨论】:

    标签: arrays idl-programming-language


    【解决方案1】:

    对于文本文件,可以使用FILE_LINES

    filename = field+'_'+color+'.dat'
    n_lines = file_lines(filename)
    openr, lun, filename, /get_lun
    array = fltarr(4, n_lines)
    

    然后是您的其余代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多