diff --git a/import/read_hdf5_as_table.m b/import/read_hdf5_as_table.m index 7cb239f..cd60605 100644 --- a/import/read_hdf5_as_table.m +++ b/import/read_hdf5_as_table.m @@ -1,4 +1,4 @@ -function output_table = load_hdf5_as_table(filename,exclude_var_set) +function output_table = read_hdf5_as_table(filename,exclude_var_set) % receives a h5 file written with function table2h5. % reduced_var_set (cell of character_vectors), not usable yet. @@ -59,18 +59,40 @@ end % Construct cell array with table data, where each row denotes a group, and % the columns are either datasets or attributes in the given group. tmp = {}; +idx = []; +group_columns = {}; for i = 1 : num_rows disp(['Begin construction of row:',INFO.Groups(i).Name]) for j = 1 : num_cols if j <= num_attr1 ds_name = [INFO.Groups(i).Name '/' INFO.Groups(i).Datasets(j).Name]; + %disp(ds_name) tmp{i,j} = h5read(filename,ds_name); + if i < 2 + column_idx = str2double(INFO.Groups(i).Datasets(j).Name(3:end)); + idx = [idx,column_idx]; + end end - if j > num_attr2 - disp(INFO.Groups(i).Attributes(j-num_attr2).Name) - tmp{i,j} = h5readatt(filename,INFO.Groups(i).Name,INFO.Groups(i).Attributes(j-num_attr2).Name); + if j > num_attr1 + Name = INFO.Groups(i).Attributes(j-num_attr1).Name; + tmp{i,j} = h5readatt(filename,INFO.Groups(i).Name, Name); + if i < 2 + + disp(Name) + % Split attribute name into column_tag (containing original + % column idx) and column_name + + delimiter_idx = find(INFO.Groups(i).Attributes(j-num_attr1).Name=='_'); + % Left most '_' determines the split location + delimiter_idx = delimiter_idx(1); + + column_idx = str2double(Name(5:delimiter_idx-1)); + group_columns = [group_columns,{Name(delimiter_idx+1:end)}]; + %disp([Name(5:delimiter_idx-1),'-',column_name]) + idx = [idx,column_idx]; + end end @@ -78,8 +100,10 @@ for i = 1 : num_rows disp(['Ends construction of row:',INFO.Groups(i).Name]) end -% TODO: how can we keep the original ordering of the columns if required by -% Thorsten. + +% Find original ordering of columns by sorting idx in ascending order +[~, idx_perm] = sort(idx,'ascend'); + varNames = [dataset_columns,group_columns]; -output_table = array2table(tmp, 'VariableNames', varNames); +output_table = array2table(tmp(:,idx_perm), 'VariableNames', varNames(idx_perm));