2016-07-01 13 views
0

dbhole.mat Datei enthält Dateien Namen wie: d1h1, d1h2, d1h3, d1h4, d2h1, d2h2, d3h1, d3h2, d3h4, d3h5, d3h6.Wie verwende ich den Dateinamen zum Sortieren und Zählen von Dateien, die in einer .mat-Datei gespeichert sind?

Ich möchte die Anzahl der Dateien mit einem Namen, der mit d1 beginnt, dann d2, d3 und so weiter in einer Schleife zählen.

+0

Es enthält Dateinamen oder Variablennamen? – Suever

+3

Bitte geben Sie eine [mcve] an. – excaza

+0

Es enthält den Dateinamen – aryan

Antwort

1

Wenn Sie meinen, dass Sie eine Liste der Variablen in einer * .mat Datei erhalten möchten, die mit d1 beginnen, d2, etc. Sie who verwenden könnte und matfile eine Liste aller Variablen zu erhalten. who akzeptiert einen regulären Ausdruck, den Sie für die Variablen erstellen können, die Sie sehen möchten.

matobj = matfile('filename.mat'); 

d1vars = who(matobj, '-regexp', '^d1h'); 
nD1 = numel(d1vars); 

Oder allgemein in einer Schleife

for k = 1:3 
    vars{k} = who(matobj, '-regexp', ['^d', num2str(k), 'h']); 

    % And get the number 
    nVars(k) = numel(vars{k}); 
end 

Wenn Sie eine ältere Version von MATLAB haben, können Sie die Datei in ein struct laden und überprüfen dann die Felder dieser Struktur für das Muster, das Sie würde mir gefallen.

data = load('filename.mat'); 
variables = fieldnames(data); 

isd1 = variables(~cellfun(@isempty, regexp(variables, '^d1h'))); 
nD1 = numel(isd1); 
+0

wenn die Datei mit dem Namen d10, d11 etc. beginnt, dann wird mit dem obigen Code dieses d10 auch gezählt, was ich nicht will. tatsächlich gibt es Dateien mit dem Namen d1h1 ... d1h22, dann d2h1 ... d2h18, dann d3h1 ... d3h23 usw. bis d14h1..d14h20. Also ich will Ergebnis einzeln, dass Dateiname beginnt mit d1 sind 22 in Zahlen, Dateien beginnen mit d2 sind 18 in Zahlen und so weiter. Ich möchte nur mit for for loop – aryan

+0

@aryan indexiert aktualisiert werden, so dass es in der Lage sein sollte, diejenigen zu behandeln – Suever

+0

dank @Suever Sir – aryan