2017-03-06 61 views
0

我想在IDL中創建一個結構並從我的ASCII文件中輸入信息。問題是我有幾個ASCII文件,總是列數和行數不同。例如,我有ASCII文件「data.dat」,並有50行和2040列。我知道,我們可以定義數據結構(如果我們假設我只有5列):在IDL中創建一個結構

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列,以及當我們事先不知道文件中的列數時。

真實的數據文件包含在不同的日子裏觀察到的幾顆恆星的通量和相應的誤差。表格沒有標題。

天Flux1 ERR1 Flux2 ERR2 Flux3 ERR3 .............. Flux2040 Err2040

感謝您的幫助!

+0

這些是什麼樣的數據?數字?混合類型?他們有頭嗎? – lbusett

+0

是數字。真實的數據文件包含在不同日期觀察到的幾顆恆星的通量,並帶有相應的誤差。表格沒有標題。 天Flux1 Err1 Flux2 Err2 Flux3 Err3 .............. Flux2040 Err2040 –

+0

因此,每個文件有2n + 1條記錄:一個用於日期和n每個用於流量和錯誤,對嗎? – lbusett

回答

1

如果數字矩陣是確定你instrad比結構,因爲你已經正確格式的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 
+0

精彩!!這是非常快速和完美的作品!一旦我有時間,我會盡力弄清楚它們的結構。非常感謝你的幫助。 –

+1

我不知道它是否可以與結構直接相關,因爲我認爲您應該事先知道「大小」。然而,您可以通過for循環輕鬆地爲每個星形創建一個結構,然後使用結構操作例程將它們放在一個單獨的結構數組中(http://www.sos.siena.edu/~jmoustakas/idl_tutorials/tutorial_structures。 HTML) – lbusett