2016-06-09 1 views
0

Je travaille sur un petit projet qui nécessite l'importation d'une énorme quantité de données dans matlab pour un traitement ultérieur. J'ai actuellement 15 fichiers Excel et chaque fichier a 8 feuilles. Ce que je veux, c'est créer une structure parente dans laquelle je veux charger chaque fichier Excel comme structure, par ex.Chargement de fichiers Excel dans des structures

parentstructure.filename.value{} 

Lorsque parentstructure est une structure principale et le nom de fichier est un fichier Excel qui est une autre structure dans la structure parent et chaque fichier excel a un 8 feuilles dans une cellule. J'ai écrit un petit code pour lire les données dans Matlab. Le code est le suivant

srcdir = ''; %%% where all the files are placed 
srcfiles = dir(fullfile(srcdir, '*.xls')); 

for p = 1:numel(srcfiles) 

    filename = fullfile(srcdir, srcfiles(p).name); 
    [~,sheets] = xlsfinfo(srcfiles(p).name); 

    for i = 1:8 
     Sheet = char(sheets(1,i)) ; 
     value{p,i} = xlsread(filename,Sheet); 

    end 
end 

Ce code fonctionne très bien et charge les données dans Matlab, mais pas sous la forme structrue que je voulais. J'ai essayé plusieurs autres combinaisons et ajustements mais j'ai eu des erreurs. Toute aide ou guide sera très apprécié. Merci

Répondre

1

Dans le code que vous avez posté, vous n'avez pas créé le struct. Pour ce faire, utilisez le mot-clé struct. Ensuite, pour affecter chaque fichier à un champ filename, vous devez utiliser genvarname (ou matlab.lang.makeValidName) pour convertir le nom de fichier en un nom de champ valide et affecter la structure à ceci.

% Initialize Parent Structure 
parentStructure = struct(); 

srcdir = ''; %%% where all the files are placed 
srcfiles = dir(fullfile(srcdir, '*.xls')); 

% Sort the files by numbers in their names 
numbers = regexp({srcfiles.name}, '\d+', 'match'); 
numbers = str2double(cat(1, numbers{:})); 
[~, sortind] = sort(numbers); 
srcfiles = srcfiles(sortind); 

for p = 1:numel(srcfiles) 

    % Convert filename to a valid field name 
    fieldname = matlab.lab.makeValidName(srcfiles(p).name); 

    filename = fullfile(srcdir, srcfiles(p).name); 
    [~,sheets] = xlsfinfo(filename); 

    value = cell(1,8); 

    for k = 1:8 
     Sheet = char(sheets(1,k)) ; 
     value{k} = xlsread(filename,Sheet); 
    end 

    % Now assign this struct of sheets to your parentStructure 
    parentStructure.(fieldname) = value; 
end 
+0

cela a fonctionné et les données sont chargées.Mais maintenant le problème est les fichiers ne sont pas chargés en séquence. Cela est dû au fait que les noms de fichiers commencent par un numéro numérique, par ex. 1.xls, 2.xls et ainsi de suite. Mais dans une structure matlab est arrangement comme 1.xls, 10.xls, 11.xls ... 2.xls, 3.xls ..... Yat-il un moyen de faire matlab pour lire les fichiers en séquence et ne pas les ajuster? Ceci est important car le reste de mon code en dépend. – Muhammad

+0

@Muhammad J'ai ajouté la partie de tri au code ci-dessus – Suever

+0

thanx @Suever son bon maintenant – Muhammad