2017-03-21 2 views
0

Wann immer ich diesen Code ausführen werde; Ich bekomme den Fehler auf Matlab.Konvertieren von Char zu Struct: Fehler Matlab

A = dir('D:\Folder_One\Folder_Two\'); 
    len = length(A); 
    disp(len) 
    P = []; 
    Q = []; 
    R = []; 
    for n = 1: len 
     filename = [' D:\Folder_One\Folder_Two\’, A(n, :)];     
     mydata = dlmread(filename);           
     Pfeatures = features(mydata(:5));        
     Qfeatures = features(mydata(:7));        
     P = [P;Pfeatures]; 
     Q = [Q;Qfeatures]; 
    end 

??? Fehler beim Verwenden von ==> horzcat Der folgende Fehler beim Konvertieren von char in struct aufgetreten: Fehler bei der Verwendung von ==> struct Konvertierung von Char zu Struktur ist nicht möglich.

Antwort

0

Variable A ist eine Struktur, die die Namen, Daten und andere Parameter über Dateien oder Ordner in Ihrem Verzeichnis in verschiedenen Feldern enthält. Wenn Sie über alle Dateien in einer Schleife möchten, sollten Sie nehmen nur das Feld „Name“ aus der Struktur, wie folgt aus:

filename = [' D:\Folder_One\Folder_Two\’, A(n).name]; 

Sie nicht char mit struct A(n) kombinieren, aber A(n).name ist char so kann man es kombinieren .

Ein weiterer Tipp ist eine Schleife von 3 und nicht von 1, denn wenn Sie auf die Variable A schauen, werden Sie sehen, dass die Plätze 1 und 2 "." und ".." für das aktuelle Verzeichnis und dessen Eltern. Ich nehme an, dass du es nicht brauchst. Wenn Ihre Dateien Namen haben, die mit einigen seltsamen Zeichen beginnen (!, @, # Usw.), so können die Punkte an anderen Stellen sein und Sie sollten es mit if Anweisung überspringen. Wie auch immer, es ist ein sauberer und sauberer Weg als nur von 3, aber beide sollten funktionieren.

Ein anderer Tipp von @DVarga ist, alle möglichen Verzeichnisse zu überspringen, wenn Sie welche haben, kann es leicht durch Überprüfung A(n).isdir bestimmt werden.

+0

Darüber zu entkommen: Auch bei der Verwendung von 'A (n) .name' wird nicht so funktionieren wie erwartet die Verzeichnisse nicht gefiltert werden (die zurückgegebene Struktur enthält '.' und' ..' Verzeichnisse, auch wenn in 'Folder_Two' keine Verzeichnisse vorhanden sind. – DVarga

+0

Sehen Sie meine Bearbeitung (und danke für Ihre) – Adiel

0

Adiels Stimme stimmt. A ist eine Struktur, und name ist ein Teil von A. Sie sollten es von A holen. die erste und zweite Zeile von dir info, sind '.' und '..'. Sie können auch verwenden

if ~strcmpi(A(n).name,'.') and ~strcmpi(A(n).name,'..') 

ersten beiden struct

+0

Adiel: Danke dafür ... :) –