Issue encountered when trying to fetch data from IMF/WEO
when trying to fecth 'IMF/WEOAGG:2021-04/1.NGDPD.us_dollars', I encountered two issues:
- relates to the fact that some series in IMF/WEO database begin with scalars as opposed to letters.
- relates to the fact that some labels in IMF/WEO database have "_" as separators and others have "-".
To make mdbnomics work I had to modify fetch_series_by_api_link.m and iter_series_info.m using try/catch/end statements to preserve the original behavior.
For the first problem I force an "A" in the label before the scalar. For the second, I force a replacement of "-" with a "_".
The quick fixes are as follows.
In fetch_series_by_api_link.m:
line 71 has been replaced by:
try
dimensions_labels_columns_names_dataset{jj} = dataset_dimensions.dimensions_labels.(dataset_dimensions.dimensions_codes_order{jj});
catch
dataset_dimensions.dimensions_codes_order{jj} = regexprep(dataset_dimensions.dimensions_codes_order{jj},'[^a-zA-Z0-9]','');
dimensions_labels_columns_names_dataset{jj} = dataset_dimensions.dimensions_labels.(dataset_dimensions.dimensions_codes_order{jj});
end
lines 120-123 have been replaced by:
try
series_code = regexprep(flat_series.series_code,'[^a-zA-Z0-9]','');
dimension_label = dataset_dimensions_labels.(dimension_codes{jj});
flat_series.labels{jj, 1} = dimension_label;
dimension_value_code = regexprep(series_dims_by_dataset_code.(complete_dataset_code).(series_code).(dimension_codes{jj}),'[^a-zA-Z0-9]','');
catch
% Avoid structure fieldnames to start with scalars (Massimo)
series_code_temp = regexprep(series_code(1),'[0-9]','A');
series_code = [series_code_temp series_code];
dimension_label = dataset_dimensions_labels.(dimension_codes{jj});
flat_series.labels{jj, 1} = dimension_label;
dimension_value_code = regexprep(series_dims_by_dataset_code.(complete_dataset_code).(series_code).(dimension_codes{jj}),'[^a-zA-Z0-9]','');
end
In iter_series_info.m: line 86 has been replaced by: try series_dims_by_dataset_code.(complete_dataset_code).(series_code) = series.dimensions; catch % Avoid structure fieldnames to start with scalars (Massimo) series_code_temp = regexprep(series_code(1),'[0-9]','A'); series_code = [series_code_temp series_code]; series_dims_by_dataset_code.(complete_dataset_code).(series_code) = series.dimensions; end