How do I read a block of data from excel sheet and store it in an array?

15 views (last 30 days)
I have ADS-B flight data in an excel sheet. The sheet has groups of flights with corresponding lat, lon. The number of data points for each of the flights are not uniform, each flight has a varying number of data points associarted with it Example flight 1 might have 30 points while flight 2 might have just 10). I want to group all the data for each flight in an array and send it to a function one flight at a time. Could someone help me with the code for this?
I'm attaching the excel file for the same here.

Accepted Answer

per isakson
per isakson on 24 Apr 2019
Edited: per isakson on 25 Apr 2019
This solution uses a containers.Map rather than a cell array because I think there might be gaps in the flight_list. See containers.Map, Object that maps values to unique keys
%%
T = readtable('plot.xlsx', 'ReadVariableNames',true );
flight_list = reshape( unique(T.flight), 1,[] );
flight_data = containers.Map('KeyType','double','ValueType','any');
for jj = flight_list
flight_data(jj) = T{ T.flight==jj, : };
end
read data for flight 12
>> flight_data( 12 )
ans =
12 15 11.133 79.362 35025
12 15 11.162 79.392 35000
12 15 11.184 79.415 34825
12 15 11.207 79.439 34600
12 15 11.215 79.448 34500
12 15 11.252 79.485 34150
...
Added later:
>> flight_data = cssm( 'plot.xlsx' );
where
function flight_data = cssm( ffs )
%%
T = readtable( ffs, 'ReadVariableNames',true );
flight_list = reshape( unique(T.flight), 1,[] );
placeholder = flight_list;
flight_data = containers.Map( flight_list, placeholder, 'UniformValues', false );
for key = flight_list
flight_data(key) = T{ T.flight==key, : };
end
end
  4 Comments
per isakson
per isakson on 25 Apr 2019
Edited: per isakson on 25 Apr 2019
You sent me a question:
"You said flight_data(12) will give me the table, but if I were to pass a particular column into a function or show output of it, how do I do it?"
No I didn't say "table". In natural English table means something with rows and columns. In Matlab it's a special data type. flight_data(12) actually returns an ordinary matrix of doubles.
Some kind of clever indexing like
>> flight_data(12)(:,3)
Error: ()-indexing must appear last in an index expression.
isn't possible. One has to do it in steps
>> m = flight_data(12);
>> col3 = m(:,3);
>> mean( col3 ) % pass a particular column into a function
ans =
13.33

Sign in to comment.

More Answers (1)

KSSV
KSSV on 24 Apr 2019
YOu may proceed like this:
clc ; clear all ;
T = readtable('plot.xlsx') ;
N = length(unique(T.(1))) ;
% loop for each flight
for i = 1:N
idx = T.(1)==i ;
T(idx,:)
end
YOu can access the column you want using T.(1), T.(2) etc. You may also use xlsread as below:
[num,txt,raw] = xlsread('plot.xlsx') ;
N = length(unique(num(:,1))) ;
% loop for each flight
for i = 1:N
idx = num(:,1)==i ;
num(idx,:)
end
  4 Comments
harman bhaveja
harman bhaveja on 24 Apr 2019
Edited: per isakson on 24 Apr 2019
So, if I were to use the first code, I should put the function within the for loop right? sending sau T.(1), T.(2) etc?
like:
for i = 1:N
idx = T.(1)==i ;
T(idx,:)
checkingcode(T.(1))
end

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!