2012-02-23 2 views
0

Я не уверен, может ли кто-нибудь помочь в этом вопросе, но здесь мы идем. У меня есть 4 папки, в которых каждая папка содержит данные для разных местоположений, в папках у меня есть 8 файлов .txt, которые представляют измеренные переменные в каждом месте (т. Е. Одинаковые переменные, измеренные в каждом месте). Я пытаюсь импортировать их в matlab и перечислять измеренные переменные в структуре, чтобы их можно было сравнивать и строить друг с другом после этого (без этого они будут писать друг друга).Создание структуры внутри структуры из импортированных текстовых файлов в matlab

Я написал скрипт для импорта их в MATLAB, скрипт работает, но не совсем так, как я хочу его, сценарий выглядит следующим образом:

clear all 
pathName = 'E:\University\CEH Lancaster\Project\LA practice\final files'; 
FolderListing = dir(pathName); 
FolderListing = FolderListing(3:end); 
    %lists the folder in the directory specified by pathName 
for i = 1:length(FolderListing); 
    LName{i} = (FolderListing(i).name); 
     %obtains the name of each folder 
end 

for i = 1:length(LName) 
    TopFolder{i} = fullfile(pathName,LName{i}); 
     %path for each individual folder 
    dirListing{i} = dir(fullfile(TopFolder{i},'*.txt')); 
     %list of the .txt files 
    for ii = 1:length(dirListing{1,1}); 
     fileToRead1{1,i}{ii,1} = (dirListing{1,i}(ii,1).name); 
     %name of the .txt files in the TopFolder 
    end 
end 

for i = 1:length(fileToRead1); 
    for ii = 1:length(fileToRead1{1}); 
    fid{1,i}{ii,1} = fopen((fullfile(TopFolder{1,i},fileToRead1{1,i}{ii,1}))); 
     %open the files specified by fileToRead prior to importing the data 
     %into matlab 
    data{1,i}{ii,1} = textscan(fid{1,i}{ii,1},'%f'); 
     %import the data into matlab 
    [~,name{1,i}{ii,1}] = fileparts(fileToRead1{1,i}{ii,1}); 
     %obtain the name of each of the variables 
    Location.(LName{i}).(genvarname(name{1,i}{ii,1})) = data{1,i}{ii,1}; 
     %create a strucutre for the individual locations and the 
     %variables. 
    end 
end 

Проблема заключается в конечном результате где вместо имени Location.Name, а затем списка переменных, у меня есть Location.Name.variables, что не кажется необходимым. Я понимаю, что это связано с тем, как я написал последнюю строку скрипта, но я не могу изменить его, не создавая ошибку. Любые советы, которые вы могли бы дать по проблеме или сценарию в целом, получили бы большую оценку.

+0

Я не совсем уверен, что понимаю, какой формат вы предпочитаете. Это то, что у вас есть «Location.Alaska.temp = 1; Location.Alaska.lat = 5; Location.Alaska.lon = 3;' и вы предпочли бы иметь «Location.Alaska = [1 3 5]»? –

+0

на данный момент я говорю Location.Alaska.temp {1,1}, где вместо этого я бы предпочел, чтобы temp не был ячейкой 1x1, а только значениями. Например, в настоящее время, если я пишу Location.Alaska.temp в командном окне, matlab возвращает [365x1 double], вместо этого я бы хотел, чтобы он возвращал вектор. – Emma

ответ

1

Я думаю, что cell2mat - это функция, которую вы хотите для этой цели. Вот мое использование, см., Соответствует ли оно вашим потребностям:

tt = {ones(1,100)}; 
tt 
tt = 

    [1x100 double] 
cell2mat(tt) 
    ans = 

     Columns 1 through 15 

     1  1  1  1  1  1  1  1  1  1  1  1... 
Смежные вопросы