2013-04-18 15 views
1

我正在運行此代碼並試圖解析它,但它給了我這個錯誤:試圖訪問L1(1,4);索引超出範圍,因爲大小(L1)= [0,0]?

試圖訪問L1(1,4);索引越界,因爲大小(L1)= [0,0]。

這是我用作源的文本文件的示例(2009),您可以將其複製並作爲文本文件過去,然後運行下面的代碼。 我會感謝你的幫助,因爲我絕望。 謝謝你這麼多

1 32790U 08021H 09001.16229234 .00000278 00000-0 42282-4 0 2397 
2 32790 097.9691 066.3073 0014889 210.0082 150.0281 14.81422378 36693 
1 32790U 08021H 09002.17545217 -.00000097 00000-0 -54482-5 0 2400 
2 32790 097.9693 067.3149 0015060 206.2003 153.8437 14.81421045 36843 
1 32790U 08021H 09003.18861152 -.00000056 00000-0 -30988-6 0 2413 
2 32790 097.9691 068.3223 0015301 202.5601 157.4939 14.81421032 36995 
1 32790U 08021H 09004.20176971 .00000327 00000-0 48542-4 0 2428 
2 32790 097.9692 069.3304 0015360 199.1526 160.9109 14.81422711 37140 
1 32790U 08021H 09005.21492806 .00000366 00000-0 53567-4 0 2435 
2 32790 097.9688 070.3376 0015282 196.0531 164.0195 14.81423660 37291 
1 32790U 08021H 09006.43071783 .00000265 00000-0 40677-4 0 2444 

-

%% 
clc; 
clear all; 
mu = 398600;    % Standard gravitational parameter for the earth 
fname = 'tle 2009.txt';  % TLE file name 
% Open the TLE file and read TLE elements 
fprintf('a[km] e inc[deg] RAAN[deg] w[deg] M[deg] T[min] h_p[km] h_a[km]\n\n ') 
fid = fopen(fname, 'rb'); 
i = 1; 
OE2=[]; 
while ~feof(fid) 
L1 = fscanf(fid,'%d%6d%*c%5d%*c%f%f%f%5d%*c%*d%5d%*c%*d%d%4d',[1,9]); 
L2 = fscanf(fid,'%d%6d%f%f%f%f%f%11f',[1,9]); 

%epoch = L1(1,4)*24*3600;  % Epoch Date and Julian Date Fraction 
Db = L1(1,5);    % Ballistic Coefficient 
inc(i)= L2(1,3);    % Inclination [deg] 
RAAN(i) = L2(1,4);    % Right Ascension of the Ascending Node [deg] 
e(i) = L2(1,5)/1e7;   % Eccentricity 
w(i) = L2(1,6);    % Argument of periapsis [deg] 
M(i) = L2(1,7);    % Mean anomaly [deg] 
n  = L2(1,8);    % Mean motion [Revs per day] 
% Orbital parametres 
a(i) = (mu/(n*2*pi/(24*3600))^2)^(1/3);  % Semi-major axis [km]  
T(i) = 2*pi*sqrt(a(i)^3/mu)/60;    % Period in [min] 
Re = 6371; 
h_p(i) = (1 - e(i))*a(i) - Re;    % Perigee Altitude [km] 
h_a(i) = (1 + e(i))*a(i) - Re;    % Apogee Altitude [km] 
% Orbital Elements 
OE = [a(i) e(i) inc(i) RAAN(i) w(i) M(i) T(i) h_p(i) h_a(i)]; 
OE2 = [OE2;a(i) e(i) inc(i) RAAN(i) w(i) M(i) T(i) h_p(i) h_a(i)]; 
fprintf('%4.2f %7.7f %4.4f %4.4f %4.4f %4.4f %4.2f %4.2f %4.2f \n', OE); 
i = i+1; 
end 
%fclose(fid); 
+0

你試過在一個調試器中運行呢?它能否成功找到該文件?打開文件?讀文件? – Patashu

+0

我在matlab中運行它,它找到文件,打開並讀取它。 我有另一個文件(如tle 2009文本文件),它讀取沒有錯誤。但是當我運行這個特定的文件時,它會給出錯誤。 謝謝感謝您的回覆Sir – Tony

+0

很明顯,'L2'沒有填滿你想填充的東西。再次檢查你的'fscanf'參數 – entropiece

回答

2

的問題是,你有一個奇數在文本文件中的行。用這個while循環你正在讀2行。所以當你在最後一行時,L1被填滿,但不是L2。

你必須改變你的循環停止在偶數行或者只是做一個條件處理之前這樣

while ~feof(fid) 
L1 = fscanf(fid,'%d%6d%*c%5d%*c%f%f%f%5d%*c%*d%5d%*c%*d%d%4d',[1,9]); 
L2 = fscanf(fid,'%d%6d%f%f%f%f%f%11f',[1,9]); 

if(L2)  
    %epoch = L1(1,4)*24*3600;  % Epoch Date and Julian Date Fraction 
    Db = L1(1,5);    % Ballistic Coefficient 
    ... 
end