Чтение файла xlsm в MATLAB | Имя файла ошибки должно быть строкой

Я пытаюсь прочитать весь набор входных/выходных данных об окружающей среде из WIOD (база данных мировых входных данных) через вложенный цикл по странам и годам. Теперь я сделал что-то подобное для учетных записей base/data раньше. Теперь я пытаюсь загрузить данные об окружающей среде. Мой ранее работающий код выглядел следующим образом:

 for yr = 95:99
   V(:,:,yr-94) = xlsread(['wiot' num2str(yr)   '_row_apr12.xlsx'],['WIOT_19' 
   num2str(yr)],'E1443:BCI1448');
 end

Теперь мой код, который не работает с сообщением об ошибке «Имя файла должно быть вектором символов». выглядит следующим образом:

 country = 
{'AUS','AUT','BEL','BGR','BRA','CAN','CHN','CYP','CZE','DEU','DNK','ESP',...

'EST','FIN','FRA','GBR','GRC','HUN','IDN','IND','IRL','ITA','JPN','KOR',...

 'LTU','LUX','LVA','MEX','MLT','NLD','POL','PRT','ROU','RUS','SVK','SVN',...
       'SWE','TUR','TWN','USA','ROW'}

for c = 1:41

   for year = 1995:1995   

      F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country(c) 
     '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));

   end
end

Я не понимаю, потому что имя файла должно быть строкой, если я выбираю страну c через country(c)? xlsread вложен в команду транспонирования, и ячейки, в которых я хочу сохранить прочитанные данные, вычисляются немного сложнее, но в основном они должны быть одинаковыми? Следующий код также отображает строку для каждого c.

  for c = 1:41
    country(c)
  end 

Можете ли вы помочь мне найти мои ошибки в кодировании? Почему Matlab не распознает имя файла как строку?

Спасибо за помощь.


person Yan91    schedule 16.07.2018    source источник
comment
Попробуйте это: F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country{c},... '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));. Если вы хотите разбить код на две строки, добавьте ... в конце первой строки. Кроме того, country — это массив ячеек, country(c) дает ячейку 1x1, вам нужно country{c}, чтобы получить значение в ячейке.   -  person Anthony    schedule 16.07.2018
comment
country(c) — это массив ячеек, поэтому [country(c) 'abc'] — это массив ячеек. Вместо этого используйте фигурные скобки, чтобы получить массив символов по индексу c, например: country{c}.   -  person Wolfie    schedule 16.07.2018


Ответы (1)


Попробуй это,

for c = 1:41

   for year = 1995:1995   

      F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country{c} 
     '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));

   end
end
person amahmud    schedule 16.07.2018
comment
Приведение типов к строке не требуется, нужны правильные скобки (ref) - person Wolfie; 16.07.2018
comment
Привет, спасибо за невероятно быстрый и полезный ответ. Ну string() не работал. Но char() сделал. В общем, как бы то ни было. Большой! - person Yan91; 16.07.2018
comment
Хорошо, спасибо за комментарии, я тоже попробую версию с кронштейном. - person Yan91; 16.07.2018