2017-03-06 5 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.col1またはprint, data.col2など...しかし、これは私に最初の5列を与えます。どのように私は同じことをすることができますが、2040の列の場合は、また、我々は事前にファイルの列の数を知らないとき。

実際のデータファイルには、異なる日に観測されたいくつかの星のフラックスとそれぞれのエラーが含まれています。テーブルにはヘッダーがありません。

日Flux1 ERR1 Flux2 ERR2 Flux3 ERR3 .............. Flux2040 Err2040あなたの助けを

ありがとう!数値行列は、あなたが適切にASCIIファイルをフォーマットしているので、あなたは簡単な解決策だけで使用することです、構造よりもinstradためのOKであれば

+0

どのような種類のデータですか?数値?混合型ですか?彼らはヘッダーを持っていますか? – lbusett

+0

はい数値です。実際のデータファイルには、異なる日に観測されたいくつかの星のフラックスとそれぞれのエラーが含まれています。テーブルにはヘッダーがありません。 日数Flux1 Err1 Flux2 Err2 Flux3 Err3 .............. Flux2040 Err2040 –

+0

各ファイルには2n + 1個のレコードがあります。つまり、日付とフラックスとエラーはそれぞれn個です。 – lbusett

答えて

1

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)を使用してそれらを1つの構造体の配列にまとめることができます。 html) – lbusett

関連する問題