2016-07-01 22 views
2

Ich möchte zwei Strings aus zwei Strukturen vergleichen. Mein Code ist wie unten:Matlab: Strings in einer for-Schleife vergleichen

% Matlab Modell

scannen
[variables] = Simulink.findVars('myModell'); 
variablesNames =[]; 

%save the names of all the variables in variablesNames 
for t= 1:length(variables) 
    variablesNames(t).Name = variables(t).Name; 
end 

%scan workspace 
for f = fieldnames(my_workspace) 
    found = false; 
    for c = 1:length(variablesNames) 
     if strcmp(f{c}, variablesNames(c))   
      found = true; 
      result = 'Found in Workspace: '; 
     end  
     if ~found 
      result = 'Not found inside Workspace'; 
     end 
    end 
    disp(['Workspace Variable: ', sprintf('%-*s',40,f{c}), result]); 
end 

variablesNames eine Struktur 1x15 mit 1 Feld ist

my_workspace ist 1x1 Struktur mit 20 Feldern

Ich habe nur eine Variable als Rückgabe. Was ist falsch in diesem Code?

+0

'f = Feldnamen (my_workspace)'? meinst du 'f = 1: numel (feldnamen (my_workspace))'? –

+0

Sie meinen nur einen Wert in 'result'? Das ist ziemlich normal, da Sie es bei jedem Looping überschreiben. Versuchen Sie 'result' in' result {c} 'zu ändern. – BillBokeey

+0

@Ander Biguri: Ich habe Ihren Vorschlag versucht, aber bitte beachten Sie, dass ** f ** eine 20x1 Zelle ist. Hier ist der Fehler: Zellinhaltsreferenz von einem Nicht-Zellen-Array-Objekt. Fehler in Stackoverflow (Zeile 13) wenn strcmp (f {c}, Variablennamen (c)) – lara

Antwort

2

Ich verstehe nicht wirklich, warum Sie hier eine neue Struktur erstellen: variablesNames(t).Name, daher habe ich nur diesen Teil entfernt.

Der modifizierte Code nur iteriert durch den variables struct-Array und prüft, ob die Variable my_workspace ein Feld mit dem Namen des Wertes in dem Name Feld des aktuell verarbeiteten Elements gespeichert ist, unter Verwendung von isfield.

[variables] = Simulink.findVars('myModell'); 

for i = 1:length(variables) 
    if isfield(my_workspace, variables(t).Name) 
     result = 'Found in Workspace: '; 
    else 
     result = 'Not found inside Workspace'; 
    end 

    disp(['Workspace Variable: ', sprintf('%-*s', 40, variables(t).Name), result]); 
end